我从gcc收到一个奇怪的错误,但无法弄清楚原因。我编写了以下示例代码,以便更清楚地说明问题。基本上,我定义了一个类,并将其复制构造函数和复制赋值运算符设为私有,以防止意外调用它们。
我期望这段代码能够编译通过,但是使用gcc编译时却失败了。实际上,gcc报错说"branch::branch(const branch&) is private",而根据我的理解,这个函数不应该被调用。
赋值运算符是正常工作的,因为如果我将main()函数的内容替换为
#include <vector>
#include <cstdio>
using std::vector;
class branch
{
public:
int th;
private:
branch( const branch& other );
const branch& operator=( const branch& other );
public:
branch() : th(0) {}
branch( branch&& other )
{
printf( "called! other.th=%d\n", other.th );
}
const branch& operator=( branch&& other )
{
printf( "called! other.th=%d\n", other.th );
return (*this);
}
};
int main()
{
vector<branch> v;
branch a;
v.push_back( std::move(a) );
return 0;
}
我期望这段代码能够编译通过,但是使用gcc编译时却失败了。实际上,gcc报错说"branch::branch(const branch&) is private",而根据我的理解,这个函数不应该被调用。
赋值运算符是正常工作的,因为如果我将main()函数的内容替换为
branch a;
branch b;
b = a;
它将按预期进行编译和运行。
这是gcc的正确行为吗?如果是,那么上述代码有什么问题? 对我来说,任何建议都是有帮助的。谢谢!