我可以使用`brace-init-list`来初始化包含`std :: string`字段的结构吗?

时间:2012-02-13 06:32:41

标签: c++

据我所知,std::string是非POD类型 当我定义一个包含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

1 个答案:

答案 0 :(得分:4)

Book类型是聚合,因此使用聚合初始化语法非常好。无论成员本身是POD还是聚合,都无关紧要。