不包含头文件就无法定义 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++中,typedefusing 不定义新类型(即强类型),而仅定义别名(即,它们的typeid相同)。因此,在您的情况下,auto仅推导sizeof运算符返回的基本类型,与类型别名std::size_t相同。编译器没问题。

关于c++ - size_t和sizeof不一致,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30206065/

10-11 22:48
查看更多