微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

假设只初始化了静态成员,隐式默认构造函数是否仍然微不足道?

如何解决假设只初始化了静态成员,隐式默认构造函数是否仍然微不足道?

基于cppreference.com,如果没有非静态成员初始化器,那么认构造函数被认为是平凡的,这是否意味着如果我们添加一个静态成员,认构造函数仍然是平凡的,类类型是POD ?换句话说,如果在一个 C 兼容的类类型中我们声明并初始化了一个静态成员,我们是否仍然可以将 struct 视为 POD 类型?例如,

struct PodType {
    static int n = 10;
    float x;
    float y;
};

上述 struct C 兼容 (POD) 吗?

解决方法

感谢所有有用的评论,我可以有把握地说,在添加静态成员后,结构仍然是微不足道的(又名 POD)。 此外,<type_traits> 提供了各种方便的帮助器来检查类型的特征,例如 is_trivial。类似地,编译器对类型特征有特定的支持,例如 Microsoft C++ compiler 我们可以使用 __is_pod

#include <stdio.h>
#include <type_traits>

struct Foo {
    static constexpr int n = 10;
    float x;
    float y;
};

int main () {
    // msvc compiler-specific type trait:
    __is_pod(Foo) == true ? printf("true\n") : printf("false\n");

    // <type_traits> header type trait:
    std::is_trivial<Foo>::value ? printf("true\n") : printf("false\n");

    return (0);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。