2012-02-13 1 views
2

私が知る限り、std::stringは非PODタイプです。
std::stringフィールドを含む構造体を定義するとき。
構造体を初期化するのにまだbrace-init-listを使用できますか?
コードは次のように動作します。コンパイラは私に警告を与えません。何か不足していますか?`std :: string`フィールドを含む構造体を初期化するために` brace-init-list`を使うことはできますか?

#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

' "自体はのPODまたは集合体であるメンバーは全く関係ありませんかどうか。"'。それはC++ 03で重要です。 – Nawaz

+3

'集合体は、ユーザ宣言されたコンストラクタ(12.1)、非公開または保護された非静的データメンバー(11節)、基本クラス(10節)、および仮想関数なしの配列またはクラス(9節) (10.3)」と書かれています。したがって、ブックタイプ*は集約です。 – fredoverflow

+0

うーん..あなたは正しい。 +1 :-) – Nawaz

関連する問題