Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Visual Studio sizeof()IntelliSense与编译时的差异_C++_Visual Studio_Visual C++_Visual Studio 2015_Intellisense - Fatal编程技术网

C++ Visual Studio sizeof()IntelliSense与编译时的差异

C++ Visual Studio sizeof()IntelliSense与编译时的差异,c++,visual-studio,visual-c++,visual-studio-2015,intellisense,C++,Visual Studio,Visual C++,Visual Studio 2015,Intellisense,我的代码如下所示: #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; } 但当我“悬停”在sizeof(MyClass)上时,我得到

我的代码如下所示:

#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;
}
但当我“悬停”在
sizeof(MyClass)
上时,我得到:

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


有人知道如何解决这个问题吗?

编译时和运行时之间没有区别;编译器和IDE的“intellisense”之间存在差异,后者似乎不支持/识别
#pragma pack
指令

忽略它。尺寸为13。

因为您实际上可以构建程序,所以您知道编译时断言成功了,尽管有“红线”

在该断言之前添加一条注释可能是值得的,它解释了Visual Studio 2015的用户将在其IDE中看到以下断言的错误否定


如果Microsoft Connect上还没有错误,您也可能希望提出错误。

您的问题的哪一部分与实际编译时间有关?似乎您的UI/IDE只有一个问题。IIRC用于IntelliSense的编译器(用于处理鼠标上方和下划线)与用于实际构建程序的编译器不同。它们的行为可能不同,在本例中显然是。您可能已经在宏中投入了资金,但我建议您使用static_assert(condition),因为这是一种可移植的方法,可以执行相同的IMO。@JoachimPileborg:对,Intellisense编译逻辑设计用于处理格式错误的程序,是的,我想这是Visual studio中的另一个错误。。。“希望没人会注意到”这类东西。@rustyx将
#pragma pack()
移动到
函数后面,Intellisense将显示正确的大小。看起来Intellisense确实检查了
#pragma pack()
指令-它只是做得不正确。@rustyx所以,我刚刚用
pack(2)
做了另一个测试,
sizeof(MyClass)
的结果是14。Intellisense对
sizeof
的评估似乎总是使用它当前所在的包大小。@rustyx和另一件事:
alignof
的行为相同。谢谢。这有助于简化这个场景,但我们的代码具有更大的结构,混合了不同的包,因此如果我在sizeof()之前定义pragma pack(1),那么IntelliSense给出的值太低。
sizeof(MyClass)=13