簡體   English   中英

C ++ const-cast參考

[英]C++ const-cast a reference

這個對嗎? 它可以使用我的編譯器進行編譯,但是有人告訴我它不使用AIX。

typedef std::vector<Entry>::iterator Iterator;
typedef std::vector<Entry>::const_iterator ConstIterator;

bool funct(ConstIterator& iter) const;
inline bool funct(Iterator& iter){return funct(const_cast<ConstIterator&>(iter));}

我應該怎么做才能使我的代碼在AIX平台上編譯? (除了使用Ctrl-C Ctrl-V重新實現非const版本外)。

const_cast用於刪除變量的常數。 也就是說,如果您具有const A& a ,則可以編寫A& b = const_cast<A&>(a) 現在,您將可以修改b或對其調用非常量方法。

在這種情況下,您可以從常規iterator構造const_iterator ,即使不使用const_cast也總是可能的。 請記住,這是兩種不同的類型,而const_iterator恰好是可以從iterator構造的,在這種情況下,C ++ const-ness沒什么要​​緊的。

iteratorconst_iterator (通常)是不同的類型,因此您不能轉換引用。 但是, iterator可轉換為const_iterator ,因此您可以執行

return funct(static_cast<ConstIterator>(iter));

或者,更安全,因為它僅允許顯式轉換:

ConstIterator citer = iter;
return funct(citer);

暫無
暫無

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

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