2012-02-13 35 views
2

就我所知,std::string是非POD類型。
當我定義一個包含std::string字段的結構。
我仍然可以使用brace-init-list來初始化結構嗎?
該代碼波紋管的作品。編譯器不給我警告。我錯過了什麼嗎?我可以使用`brace-init-list`初始化一個包含`std :: string`字段的結構嗎?

#include <stdio.h> 
#include <string> 

int main() 
{ 
    struct Book 
    { 
     int id; 
     std::string title; 
    }; 

    Book book = {42, "hello, world"}; 
    printf("%d:%s\n", book.id, book.title.c_str()); 
} 

$ g++ --version 
g++ (GCC) 4.1.2 20070925 (Red Hat 4.1.2-33) 
$ g++ -Wall -std=c++98 main.cpp -lstdc++ 
$ ./a.out 
42:hello, world 

回答

4

Book類型是聚集體,因此使用聚合初始化語法是完全沒有問題。成員本身是否爲POD或聚合體根本無關緊要。

+0

' 「不管是不是成員本身是莢或聚集無所謂的。」'。它在C++ 03中很重要。 – Nawaz 2012-02-13 08:34:26

+3

'聚合是沒有用戶聲明的構造函數(12.1),沒有私有或受保護的非靜態數據成員(第11節),沒有基類(第10節),也沒有虛函數的數組或類(10.3)。'因此,Book類型*是一個聚合。 – fredoverflow 2012-02-13 08:40:49

+0

嗯..你說得對。 +1 :-) – Nawaz 2012-02-13 08:45:00

相關問題