我期望以下程序打印「11」,但它實際上打印「01」,因此看起來第一次分配失敗。自定義類上的static_cast導致複製分配失敗
struct A
{
A(int i = 0) : i_(i) {}
int i_;
};
int main()
{
A x(1);
A y;
static_cast<A>(y) = x; // *** Fails to assign ***
std::printf("%i", y.i_);
y = x;
std::printf("%i", y.i_);
}
如果我使用原始類型等int
代替A
然後int x = 1; int y; static_cast<int>(y) = x;
並1
賦值給x
。有什麼方法可以讓它適用於自定義類型?我嘗試將operator A() { return *this; }
添加到struct A
,但那不起作用。
顯然這是一個愚蠢的程序,但問題出現在模板函數中,我有static_cast<std::remove_const<T>::type>(y) = x
,它對原始類型工作正常,但現在對於自定義類型失敗。
'的static_cast (Y)'' – David
的std :: remove_const'應使用*極端*謹慎而不輕鬆 - 引入未定義行爲的風險很大。 –