sizeof运算符生成的数据类型

时间:2017-10-07 07:44:17

标签: c++ c++11 c++14 sizeof

比我更了解的人告诉我,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.

我意识到这可能会争论一个引脚头上的天使数量,但我仍然想知道哪个是合法的正确。

谢谢, 射线

1 个答案:

答案 0 :(得分:3)

std :: size_t是 typedef-name 类型别名,它是某些其他现有类型的synonim;它不是一个独特的类型,仅用于名称查找。

所以,例如,你不能重载/专门化/ etc ...反对size_t VS它的基础类型......

说,编译器内部知道别名是什么,所以它可以使用它来改进它的诊断等等,因此可能(或可能不会)出现在编译器生成的消息中和其基础类型一起作为程序员的帮助......