这里有什么问题?
class A {
A(const A&); //no copy constructor
A& operator= (const A&); //no copy assignment
public:
bool x;
A(bool _x):x(_x){}
A(A&& a):x(a.x); //move constructor
A& operator= (A&& a){x = a.x; return *this;} //move assignment
};
A operator&& (A a, A b) {return A(a.x && b.x);} //this works
A operator! (A&& a) {return A(!(a.x));} //this also works
//but if instead I use
A operator! (A a) {return A(!(a.x));}
//it leads to linker error for missing copy constructor.
嗯,当然我可以通过r-reference传递参数。对于已知为不可复制的值传递对象没有多大意义。但是,为什么价值传递与"&&"并且失败了"!"?
编辑:我发现只有当我以下列方式使用此运算符时才会出现错误:
A f(bool x) {return A(x);}
std::vector<A> v;
v.push_back(!f(true));
如果我删除&#34;!&#34;从最后一行,它编译。 标准是否说了些什么呢?也许它只是我原来的MSVC2010编译器问题?