簡體   English   中英

const_cast和static_cast

[英]const_cast vs static_cast

要將const添加到非const對象,哪個是首選方法? const_cast<T>static_cast<T> 在最近的問題中,有人提到他們更喜歡使用static_cast ,但是我會認為const_cast可以使代碼的意圖更加明確。 那么使用static_cast使變量const的參數是什么?

都不使用。 初始化引用該對象的const引用:

T x;
const T& xref(x);

x.f();     // calls non-const overload
xref.f();  // calls const overload

或者,使用像boost所提供的那樣 implicit_cast函數模板:

T x;

x.f();                           // calls non-const overload
implicit_cast<const T&>(x).f();  // calls const overload

考慮到static_castconst_cast之間的選擇, static_cast絕對是更可取的: const_cast僅應用於拋棄 const_cast ,因為它是唯一可以這樣做的強制轉換,而拋棄constness本質上是危險的。 通過刪除常量來獲得的指針或引用來修改對象可能導致不確定的行為。

我說static_cast是可取的,因為它只允許您從非const static_castconst (這是安全的),而不能朝另一個方向(不一定安全)進行轉換。

這是一個隱式廣播函數模板的好用例。

您可以編寫自己的演員表:

template<class T>
const T & MakeConst(const T & inValue)
{
    return inValue;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM