Visual Studio sizeof()的区别IntelliSense与编译时的区别

rus*_*tyx 3 c++ intellisense visual-studio visual-c++ visual-studio-2015

我的代码看起来像这样:

#include <stdio.h>

#pragma pack(1)
class MyClass
{
  bool a;
  bool b;
  int c;
  char d[3];
  bool e[4];
};
#pragma pack()

int main()
{
  printf("sizeof(MyClass)=%d\n", sizeof(MyClass));
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

sizeof(MyClass)=13
Run Code Online (Sandbox Code Playgroud)

但当我"徘徊"过来时,sizeof(MyClass)我得到:

在此输入图像描述

这不是一个大问题,但我正在尝试实现编译时断言,但它不起作用(获得红色下划线):

在此输入图像描述

任何人都知道如何解决这个问题?

Lig*_*ica 7

这不是编译时和运行时之间的区别; 它是您的编译器和IDE的"intellisense"之间的区别,后者似乎不支持/识别该#pragma pack指令.

忽略它.大小是13.

既然你可以实际构建你的程序,你知道编译时断言成功,尽管有"红线".

在断言之前添加注释可能是值得的,并解释说Visual Studio 2015的用户会在IDE中看到以下断言的错误否定.

您可能还希望在Microsoft Connect上引发错误,如果还没有.