C++ 定点静态_强制转换是否有效以避免复制? 更新: class-foo{ 公众: foo():x_u0{std::cout

C++ 定点静态_强制转换是否有效以避免复制? 更新: class-foo{ 公众: foo():x_u0{std::cout,c++,c++11,static-cast,C++,C++11,Static Cast,给定现在运行的代码,这一行: base b = *static_cast<base*>(&d); 在现在完全不同的问题中: f = *static_cast<foo*>(&b); 它调用foo&operator=(foo const&c),没有额外的临时变量。但是 f = static_cast<foo>(b); 或 这确实会产生一个临时性的问题。当然,我更喜欢这样做: f = b; 像*static_cast(&b); 是的。这是不必

给定现在运行的代码,这一行:

base b = *static_cast<base*>(&d);

在现在完全不同的问题中:

f = *static_cast<foo*>(&b);
它调用
foo&operator=(foo const&c)
,没有额外的临时变量。但是

f = static_cast<foo>(b);

这确实会产生一个临时性的问题。当然,我更喜欢这样做:

f = b;
像*static_cast(&b);

是的。这是不必要的噪音。只要这样做:

f = b;

它具有完全相同的效果。

您的意思是不可复制初始化。而且,
*static_cast(&d)
相当于更简单的
static_cast(d)
。无法在示例代码中实例化任何
base
派生的
对象。您的代码删除了复制构造函数,这也禁用了隐式默认构造函数。请从问题中删除此不相关的假代码,并将真实代码放在此处,而不是放在其他网站上。@user1810087这是因为运算符=正在调用…初始化与赋值不同。请注意输出中的
foo运算符=
。@user1810087:这是因为您使用的是赋值运算符,而不是复制构造函数。如果您执行的是您错误地称为最初工作的操作,它将尝试调用复制构造函数,而不会编译。@user1810087:我不知道你为什么要给我那个链接。我是应该给你那个链接的人,因为你一再忽视“独立、正确”的部分。
f = *static_cast<foo*>(&b);
f = b;
f = static_cast<foo>(b);
f = foo(b);
{
    foo temporary(b); // calls foo(foo const& );
    f = temporary;    // calls foo& operator=(foo const& );
}
f = b;
f = b;