我有一个关于POD-ness的问题。我预计如果B是非POD而B是A中的成员,那么A将是非POD。 但是,下面的代码示例输出“10”,因此B被正确地视为非POD,但A是。
struct A
{
int i;
struct B
{
std::string s;
};
};
std::cout << std::is_pod<A>::value;
std::cout << std::is_pod<A::B>::value;
这是GCC中的错误吗?我正在使用“c ++(GCC)7.3.1 20180312”。 我没有看到这种行为的意义。假设我想优化缓冲区分配并使用POD检查以确定是否必须使用new或者可以将malloc / realloc用于特定类型。使用malloc为A分配存储是完全错误的。 最好的问候
答案 0 :(得分:5)
A
中包含A::B
类型。
A
的实例中没有A::B
的实例。只有类型的定义,但没有实例化。
将B b;
添加到A
,您的异常就会消失。