C++ 对于构造函数,{}是否与=default相同?

C++ 对于构造函数,{}是否与=default相同?,c++,c++11,C++,C++11,在默认构造函数的定义中,is=default与{}完全相同?是否存在可能有不同含义的情况 伪代码示例: template<typename... Args> struct S // maybe with base classes { S() = default; // S() {} - same or different? // other stuff... }; 模板 结构S//可能与基类一起使用 { S()=默认值; //S(){}-相同

在默认构造函数的定义中,is
=default
{}
完全相同?是否存在可能有不同含义的情况

伪代码示例:

template<typename... Args>
struct S // maybe with base classes
{
    S() = default;    
    // S() {}    - same or different?

    // other stuff...
};
模板
结构S//可能与基类一起使用
{
S()=默认值;
//S(){}-相同还是不同?
//其他东西。。。
};

它们是不同的。通过
S(){}
S
被认为具有用户提供的构造函数,而
S()=默认值不是。例如,
S
是否符合聚合类型,这会产生不同。请参阅。

另一点是,用户提供的默认构造函数无法满足琐碎的可构造性要求。这实际上取决于
=default发生。除了前面所说的,如果您有任何非静态数据成员,则这些成员是默认初始化的,而不是可以进行值初始化的值初始化。@user2864740做得好。我试着用几乎完全相同的方法进行搜索,但什么也没找到:|注意,dup中的所有讨论和下面的答案都假设默认发生在第一次声明中。看来,
struct S{S();};S::S()=默认值
结构{S();};S::S(){}