阅读以下标准段落:
[C++11: 5.3.3/6]:
The result ofsizeof
andsizeof...
is a constant of typestd::size_t
. [ Note:std::size_t
is defined in the standard header<cstddef>
(18.2). —end note ]
现在:
[C++11: 18.2/6]:
The typesize_t
is an implementation-defined unsigned integer type that is large enough to contain the size in bytes of any object.
当然,这篇文章不需要 size_t
是用 typedef
定义的类型别名, 但由于它已明确声明可通过标准 header <cstddef>
提供,我认为我们可以认为未包含 <cstddef>
应该删除任何保证 size_t
应可用于程序。
但是,根据第一个引用,我们无论如何都可以获得 std::size_t
类型的表达式。 .
We can actually demonstrate both of these facts :
int main()
{
typedef decltype(sizeof(0)) my_size_t;
my_size_t x = 0; // OK
std::size_t y = 1; // error: 'size_t' is not a member of 'std'
}
std::size_t
对程序不可见,但 sizeof(0)
还给我们一个?真的吗?
因此说5.3.3/6
是不正确的吗? 有缺陷,并且它实际上具有“与 std::size_t
解析为的任何类型相同的类型”,但 不是 std::size_t
自己?
当然,如果std::size_t
,两者是一且相同的。是一个类型别名,但实际上在任何地方都不需要。
最佳答案
标准只是要求 sizeof(expr)
的类型与 std::size_t
的类型相同。没有强制使用 sizeof(expr)
使名称 std::size_t
可用,因为 std::size_t
只是命名其中之一内置的整型没有问题。
关于c++ - `sizeof` *真的*评估为 `std::size_t` 吗?它可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20808905/