比我更了解的人告诉我,sizeof运算符不会生成类型为“size_t”的值,而是生成一个与“size_t”具有相同基础类型的值。虽然这可能只是语义技术性,但C ++ 11 5.3.3.6和C ++ 14 5.3.3.6都说明如下:
The result of sizeof and sizeof... is a constant of type std::size_t.
[ Note: std::size_t is defined in the standard header <cstddef> (18.2). —end note ]
我认为这意味着如果有办法显示sizeof表达式的数据类型,它应该显示“std :: size_t”或“size_t”而不是“unsigned int”,“unsigned long”或者任何size_t碰巧代表特定的编译器,它应该显示“std :: size_t”或“size_t”,即使范围内没有size_t的typedef,因为编译器内部知道它是size_t。
但是,如果我的解释不正确,而且显示基础数据类型是正确的,那么C ++ 11和C ++ 14不应该这样说:
The result of sizeof and sizeof... is a constant of **the same type represented** by std::size_t.
我意识到这可能会争论一个引脚头上的天使数量,但我仍然想知道哪个是合法的正确。
谢谢, 射线
答案 0 :(得分:3)
std :: size_t是 typedef-name 或类型别名,它是某些其他现有类型的synonim;它不是一个独特的类型,仅用于名称查找。
所以,例如,你不能重载/专门化/ etc ...反对size_t VS它的基础类型......
说,编译器内部知道别名是什么,所以它可以使用它来改进它的诊断等等,因此可能(或可能不会)出现在编译器生成的消息中和其基础类型一起作为程序员的帮助......