簡體   English   中英

這是C ++中的聚合初始化還是默認初始化?

[英]Is this aggregate initialization or default initialization in C++?

考慮以下程序。

#include <iostream>
int main()
{
    int a=int{};
    std::cout<<a;
}

它使用聚合初始化還是默認初始化? 我很困惑。

空括號或大括號( T()T{} )執行值初始化 例外情況是類型是聚合的情況,在這種情況下將使用聚合初始化。 由於int不是集合,因此將對其進行值初始化,並且由於它不是類也不是數組,因此值初始化將進行零初始化。

您想知道為什么它在C中不起作用。這種語法在C中根本不存在,請參見此答案

聚合初始化是列表初始化的一種,它初始化聚合 聚集是數組類型的對象,或具有此頁面上定義的特征的對象

在這種情況下,初始化的類型很可能是值初始化。

從C ++ 11開始,通過與其他SO答案(例如thisthis )進行比較,我會說這是:

  1. 值初始化int{} )后跟
  2. 復制初始化int a=int{} )。

順便說一下,從C ++ 17開始 ,第二步應該消失了,因為需要int{}直接初始化a

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM