这个问题仅指 pre C++11。考虑以下看似损坏的代码:
struct X
{
X(){} // default user-provided constructor
private:
X(const X&){}
};
int main()
{
X x = X();
}
根据C++11 之前的cppreference.com,将调用默认 ctor:
值初始化的效果是:
1) 如果 T 是具有至少一个用户提供的任意类型构造函数的类类型,则调用默认构造函数;
...
这似乎意味着复制 ctor 不一定需要可访问。这是正确的还是不正确的?上面的代码无法编译,因此似乎必须可以访问复制 ctor。