簡體   English   中英

static_cast引發錯誤,但C樣式強制轉換有效

[英]static_cast throws error but C-style cast works

當我使用static_cast

const C* cObj; // C is a user-defined class
void* obj = static_cast<void*>(cObj);

我得到錯誤:

轉換失去資格

但是,當我使用C樣式轉換時,它可以工作:

const C* cObj;
void* obj = (void*)cObj;

為什么會這樣呢?

通過C ++樣式強制轉換的正確方法是什么?

為什么會這樣呢?

C樣式強制轉換有效,因為它具有多個C ++強制轉換的功能。 例如,它可以消除常量性,並同時重新解釋指針類型。 由C ++編譯器所使用的過程來決定如何解釋特別是C鑄描述這里

強制轉換常量指針的C ++方法是將其強制轉換為另一個常量指針,如下所示:

const void* obj = static_cast<const void*>(cObj);

如果還需要消除常量性,則可以像這樣鏈接演員表:

void* obj = const_cast<void*>(static_cast<const void*>(cObj));

const_cast常規預防措施與往常一樣適用:如果要投射的指針指向一個常量對象,則在投射導致未定義行為后,通過非const指針修改該對象。

如果毀滅之路確實是您的意圖...

struct C;

template<class T>
T* daringly_remove_const_and_damn_the_consequences(T const* p)
{
    return const_cast<T*>(p);
}

const C* cObj; // C is a user-defined class
void* obj = static_cast<void*>(daringly_remove_const_and_damn_the_consequences(cObj));

暫無
暫無

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

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