【发布时间】:2018-03-18 23:28:23
【问题描述】:
有人告诉我,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.
我知道这可能是在争论针头上的天使数量,但我仍然想了解哪个在法律上是正确的。
谢谢, 雷
【问题讨论】:
-
在您的实现中
size_t可能与unsigned long相同,编译器知道这一点。 -
“表示”在这里不是一个好的选择。
unsigned int和unsigned long具有完全相同的表示并不罕见,但它们仍然是不同的类型。std::size_t只是一个名字,意思是“sizeof 返回的类型”。