相关疑难解决方法(0)

对C++的哪些更改使得使用显式构造函数的类的复制初始化工作?

考虑以下代码:

struct X{
    explicit X(){}
    explicit X(const X&){}
};

void foo(X a = X()){}

int main(){}
Run Code Online (Sandbox Code Playgroud)

使用C++ 14标准,GCC 7.1和clang 4.0都拒绝代码,这正是我所期望的.

但是,使用C++ 17(-std=c++1z),它们都接受代码.什么规则变了?


对于两个编译器都表现出同样的行为,我怀疑这是一个bug.但据我所知,最新的草案仍然说,默认参数使用复制初始化 1的语义.同样,我们知道explicit构造函数只允许直接初始化 2.

1:dcl.fct.default/5 ; 2:class.conv.ctor/2

c++ explicit language-lawyer c++14 c++17

17
推荐指数
1
解决办法
635
查看次数

标签 统计

c++ ×1

c++14 ×1

c++17 ×1

explicit ×1

language-lawyer ×1