如何解决假设只初始化了静态成员,隐式默认构造函数是否仍然微不足道?
基于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 举报,一经查实,本站将立刻删除。