簡體   English   中英

C ++結構值初始化

[英]C++ Struct Value Initialization

我正在搞亂結構,並注意到以下兩個例子,只有一個有效。 他們來了:

struct Test
{ 
    char *name; 
    int age; 
}; 

Test p1 = { "hi", 5 };
//works


struct Test
{ 
    char *name; 
    int age; 
}p1; 

p1 = { "hi", 5 };
//error

為什么第一個編譯而第二個編譯不? p1不是Test的對象嗎? 謝謝。

在第一個示例中,您將在“大括號初始化”中初始化具有兩個值的結構。 C ++(或C)中不支持使用括號括起的列表分配給結構。

但是,您可以使用大括號初始化創建一個新結構,然后將其分配給舊結構( p )。 C ++(和C)支持將一個結構分配給同一類型的另一個結構。

例如,在C ++ 11中:

p1 = Test{ "hi", 5 };

以下適用於C ++ 11 :(使用g++ -std=c++11 init.cpp

#include <iostream>

struct XXX {
    int a;
    const char *b;
};

int main() {
    XXX x;
    x = XXX{1, "abc"};
    // or later...
    x = XXX{2, "def"};

    std::cout << x.b << std::endl;

    return 0;
}

暫無
暫無

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

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