通过值将可移动对象传递给NOT运算符重载

时间:2016-10-02 21:09:21

标签: c++ move-semantics pass-by-value

这里有什么问题?

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编译器问题?

0 个答案:

没有答案