直接启动是否等于直接列表限制?

发布于 2025-01-23 18:57:18 字数 733 浏览 3 评论 0原文

我有以下示例:

struct S{
   int x, y;
}

S s1{1};    // direct-initialization or direct-list-initialization ?
S s2{1, 2}; // direct-initialization or direct-list-initialization ?
S s3(1);    // direct-initialization or direct-list-initialization ?
S s4(1, 2); // direct-initialization or direct-list-initialization ?
int i1{10}; // direct-initialization or direct-list-initialization ?
int i2(10); // direct-initialization or direct-list-initialization ?

我的问题

  • 我只需要知道上述语句中的初始化类型是什么?
  • 这里有标准报价吗?

我已经检查了一个问题 direct-initialization vs direct-initialization vs direct-list-initialization(c ++)然而。

I have the following example:

struct S{
   int x, y;
}

S s1{1};    // direct-initialization or direct-list-initialization ?
S s2{1, 2}; // direct-initialization or direct-list-initialization ?
S s3(1);    // direct-initialization or direct-list-initialization ?
S s4(1, 2); // direct-initialization or direct-list-initialization ?
int i1{10}; // direct-initialization or direct-list-initialization ?
int i2(10); // direct-initialization or direct-list-initialization ?

My questions

  • I just need to know what's the type of initialization in the above statements?
  • Is there any standard quote applied here?

I am already checked the question direct-initialization vs direct-list-initialization (C++), but it hasn't strict answer yet.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

情绪 2025-01-30 18:57:18

来自直接初始化文档的文档

t对象(arg);

t对象(arg1,arg2,...);
(1)

t对象{arg}; (2)(自C ++ 11)

t(其他)

t(arg1,arg2,...)
(3)

直接初始化在以下情况下进行:

    1. 初始化具有非空的括号列表的表达式列表或支撑式列表(因为C ++ 11)
    1. 具有单个括号封闭的初始化器的非类型对象的初始化(注意:对于班级类型和Brad-Init-list的其他用途,请参见List-Initialization
    1. Prvalue临时性的初始化(直到C ++ 17)通过功能性铸件或带有括号的表达式列表

列表初始化

direct-list-initialization

t对象{arg1,arg2,...}; (1)

t {arg1,arg2,...} (2)


现在我们可以使用以上来回答您的问题。

S s1{1};    // direct-list-initialization from direct-list init point 1 above
S s2{1, 2}; // direct-list-initialization from direct-list init point 1 above
S s3(1);    // direct-initialization from direct init point 1 above
S s4(1, 2); // direct-initialization from direct init point 1 above
int i1{10}; // direct-initialization from direct init point 2 above
int i2(10); // direct-initialization from direct init point 1 above

From direct initialization's documentation:

T object ( arg );

T object ( arg1, arg2, ... );
(1)

T object { arg }; (2) (since C++11)

T ( other )

T ( arg1, arg2, ... )
(3)

Direct initialization is performed in the following situations:

    1. initialization with a nonempty parenthesized list of expressions or braced-init-lists (since C++11)
    1. initialization of an object of non-class type with a single brace-enclosed initializer (note: for class types and other uses of braced-init-list, see list-initialization)
    1. initialization of a prvalue temporary (until C++17)the result object of a prvalue (since C++17) by functional cast or with a parenthesized expression list

And from List initialization:

Direct-list-initialization

T object { arg1, arg2, ... }; (1)

T { arg1, arg2, ... } (2)


Now we can use the above to answer your question.

S s1{1};    // direct-list-initialization from direct-list init point 1 above
S s2{1, 2}; // direct-list-initialization from direct-list init point 1 above
S s3(1);    // direct-initialization from direct init point 1 above
S s4(1, 2); // direct-initialization from direct init point 1 above
int i1{10}; // direct-initialization from direct init point 2 above
int i2(10); // direct-initialization from direct init point 1 above
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文