不包含头文件就无法定义 native 运算符的结果是否令人烦恼?
根据此page,在 header cstddef,cstdio,cstring,ctime和cstdlib中定义了size_t
。因此,如果不包含这些头文件,则size_t
应该是未定义的。但是,以下程序编译时没有任何警告(使用MSVC 2015RC)。
int main()
{
auto d_Size = sizeof( int );
return 0;
}
看来
size_t
在 native 类型和typedef之间有点 SCSS 。标准怎么说? 最佳答案
5.3.3 Sizeof [expr.sizeof]
但是,std::size_t
只是类型别名。 sizeof
运算符可以返回其结果,而无需“访问”类型别名。 sizeof
的结果是某种基本类型(定义了实现),然后在std::size_t
中将其别名为<cstddef>
。
另请注意,在C++中,typedef
或using
不定义新类型(即强类型),而仅定义别名(即,它们的typeid
相同)。因此,在您的情况下,auto
仅推导sizeof
运算符返回的基本类型,与类型别名std::size_t
相同。编译器没问题。
关于c++ - size_t和sizeof不一致,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30206065/