我想在c ++源代码中定义一个应该是POD的结构(因此它应该基于C标准而不是C ++编译)
例如假设我在c ++文件中有以下代码:
struct myStruct
{
int x;
int y;
}
class MyClass
{
int x;
int y;
}
如果我编译此代码,struct是POD,应编译为POD。因此,成员变量的位置遵循C标准,该标准已明确定义。
但假设用户可能会错误地将代码更改为此代码:
struct myStruct
{
int x;
int y;
private:
int z;
}
class MyClass
{
int x;
int y;
}
现在结构不是POD,编译器可以自由地将成员变量放在内存中。
如何强制编译器确保始终根据C标准编译结构?
请注意,我无法将代码放在* .c代码中,因为我正在开发一个可以包含在* .cpp源代码中的标题代码。
答案 0 :(得分:11)
你不能强迫翻译人员将其视为C"。但是你可以添加一个断言它与C代码兼容。
#include <type_traits>
struct myStruct
{
int x;
int y;
};
static_assert(std::is_pod_v<myStruct>, "Violated POD-ness of myStruct!");