当前位置:  开发笔记 > 编程语言 > 正文

我们是否需要一个可访问的复制构造函数来在C++ 98/03中进行值初始化?

如何解决《我们是否需要一个可访问的复制构造函数来在C++98/03中进行值初始化?》经验,为你挑选了1个好方法。

这个问题仅涉及预C++ 11.考虑以下看似破碎的代码:

struct X
{
    X(){} // default user-provided constructor
private:
    X(const X&){}
};

int main()
{
    X x = X();
}

Live on Coliru

根据cppreference.com在预C++ 11中的默认ctor将被调用:

值初始化的效果是:

1)如果T是具有至少一个用户提供的任何类型构造函数的类类型,则调用默认构造函数;

...

这似乎意味着复制文件不一定需要访问.这是否正确?上面的代码不能编译,因此似乎必须可以访问复制ctor .



1> Nicol Bolas..:

值初始化不需要它,但是您需要一个可访问的复制构造函数来执行此操作:

X x = X();

这是复制初始化,需要一个可访问的复制构造函数.即使它不会调用该复制构造函数,它仍然需要存在.

C++ 17可能是第一个需要解除此需求的版本.

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有