【发布时间】:2016-09-19 18:36:30
【问题描述】:
我预计下面的程序会打印“11”,但它实际上会打印“01”,所以看起来第一个分配失败了。
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<A&>(y) -
std::remove_const使用时应极度小心谨慎 - 引入未定义行为的风险很大。
标签: c++