假设我有这种假设的、奇怪的和不直观的情况
#include <iostream>
struct A
{
A()
{
member = 1;
}
A(const A &)
{
member = 2;
}
int member;
};
int main()
{
A a = A();
A b = a;
std::cout << a.member << std::endl;
std::cout << b.member << std::endl;
return 0;
}
我知道复制省略意味着a
将仅使用默认构造函数进行初始化,而 b 将使用复制构造函数进行初始化。我也知道(至少在 gcc 上)你可以告诉编译器不要做任何复制省略。
我的问题是有什么方法可以让编译器不只为这个类使用复制省略吗?
我意识到在任何实际情况下的答案都是 99.9% 的时间找到其他方式,而我没有 0.01% 的情况之一(这是一个实际的假设问题,而不是“假设问题”)