gpt4 book ai didi

c++ - 私有(private)复制构造函数/赋值运算符和复制初始化

转载 作者:可可西里 更新时间:2023-11-01 17:29:33 26 4
gpt4 key购买 nike

这是 this question 的后续

在下面的代码中,为什么第 1 行可以编译而第 2 行和第 3 行没有编译(使用 Visual C++ 2010)

class ABase
{
protected:
ABase() {}
~ABase() {}
private:
ABase( const ABase& );
const ABase& operator=( const ABase& );
};

class A : ABase
{
};

class B
{
public:
B() {}
~B() {}
private:
B( const B& );
const B& operator=( const B& );
};

int main( void )
{
A a = A(); // line 1
A a2( a ); // line 2
B b = B(); // line 3

return 0;
}

(注意 BA 是 boost::noncopyable 的拷贝)

编辑:我的问题不是知道为什么第 2 行和第 3 行无法编译(我知道,复制构造函数是私有(private)的),但为什么第 1 行可以编译。

最佳答案

确实第 1 行不应该编译。

显然 vc++2010 在这种情况下执行语言规则有问题(可能是因为它们与基类相关而不是对象本身)。

关于第 1 行的 g++ 诊断信息非常清楚

ncopy.cpp: In copy constructor ‘A::A(const A&)’:
ncopy.cpp:7: error: ‘ABase::ABase(const ABase&)’ is private
ncopy.cpp:12: error: within this context
ncopy.cpp: In function ‘int main()’:
ncopy.cpp:27: note: synthesized method ‘A::A(const A&)’ first required here

关于c++ - 私有(private)复制构造函数/赋值运算符和复制初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6524185/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com