c++ - 具有嵌套结构/类的 POD 性

标签 c++ templates gcc

我有一个关于 POD 性的问题。我预计如果 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 分配存储空间是完全错误的。 最好的问候

最佳答案

A 中有一个类型 A::B

A 的实例中没有 A::B 的实例。只有类型的定义,但没有实例化。

B b; 添加到 A 中,您的异常就会消失。

关于c++ - 具有嵌套结构/类的 POD 性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49455064/

相关文章:

C++模板语法

c# - 泛型类型的转换无效

c - 暂时转义函数范围以在 C 中定义全局符号? (海湾合作委员会)

c - 将动态大小的可变长度数组 (VLA) 初始化为 0

c++ - C++11 中的随机闭区间

c++ - 在 C++ 代码中处理 PL/pgSQL 函数的消息

c++ - 允许使用右值捕获但不分配给的运算符重载

c++ - 如何使用 boost::date_time 从 time_t 获取本地日期时间?

php - 使用模板发送电子邮件 (Mandrill PHP)

c++ - 一个 gcc 编译错误(关于复制 c'tors)这看起来很奇怪(至少对我来说)