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
' "自体はのPODまたは集合体であるメンバーは全く関係ありませんかどうか。"'。それはC++ 03で重要です。 – Nawaz
'集合体は、ユーザ宣言されたコンストラクタ(12.1)、非公開または保護された非静的データメンバー(11節)、基本クラス(10節)、および仮想関数なしの配列またはクラス(9節) (10.3)」と書かれています。したがって、ブックタイプ*は集約です。 – fredoverflow
うーん..あなたは正しい。 +1 :-) – Nawaz