【发布时间】:2014-07-15 22:51:34
【问题描述】:
我有一些误解:
让我们将结构 A 的默认构造函数标记为已删除:
struct A
{
A() = delete;
};
下一条指令格式正确,效果如何?:
A a{};
来自cppreference value initilization:
1) 如果 T 是一个没有默认构造函数或带有 用户提供的默认构造函数或已删除的默认构造函数 构造函数,对象是默认初始化的。
但是那么默认初始化的效果是:
如果 T 是类类型,则调用默认构造函数来提供 新对象的初始值。
还是聚合初始化? 谢谢!
【问题讨论】:
-
不,clang-3.5 和 gcc-4.9 用 -std=c++1y 编译它
-
我会觉得这很令人惊讶。它看起来像一个突破性的变化。它必须是值初始化,如果它格式正确,它将否定一些删除特殊函数的原因。
-
我正在查看最新的草稿 N3936,但不知道如何编译。但是你是对的,clang 3.4 和 gcc-4.9 都使用
-std=c++1y编译它。 gcc-4.8 没有并抱怨删除的构造函数。 -
也许通过这个方案,他们想提供一种仅 POD 结构或其他东西的方法。
-
In all cases, if the empty pair of braces {} is used and T is an aggregate type, aggregate-initialization is performed instead of value-initialization.您的struct A是一个(空)聚合。
标签: c++ language-lawyer c++14