假设我们的目标是一种特定的硬件架构、一种特定的操作系统(如果适用)和一种特定的“位数”(32 与 64 等)。在这种情况下,假设不同的编译器对相同的编译器使用相同sizeof(T*)
的编译器是否安全T
?标准规则是否以这种方式或另一种方式?
即使标准不保证,这是否适用于“大多数用于正常使用和效率的普通编译器?” 我可以想象如果允许的话,理论上的 Hell++ 会使用不同的大小,但是人们实际使用的编译器呢?
我也会对我认为与指针 ( std::size_t
, std::ptrdiff_t
, std::intptr_t
) 密切相关的其他类型感兴趣。
作为一个“额外的问题”,是否可以对其他内置类型(例如char
, int
, float
, long
)说些什么?但是,在编译器中遇到不同的大小并不会让我对这些感到惊讶。
编辑
还要考虑一件事情:这会受到extern "C"
链接的影响吗?作为应用程序的示例,如果我有一个发布此功能的库:
extern "C" void foo(void *);
理论上是否有可能我将无法正确调用该函数,因为库的编译器使用的编译器sizeof(void*)
与我的编译器不同?