采取以下标准段落:
[C++11: 5.3.3/6]:结果sizeof和sizeof...是类型的常量std::size_t.[注意:std::size_t在标准标题<cstddef>(18.2)中定义. - 尾注]
现在:
[C++11: 18.2/6]:该类型size_t是一个实现定义的无符号整数类型,其大小足以包含任何对象的字节大小.
当然,该段落并不要求这size_t是一个定义的类型别名typedef,但由于它明确声明可以通过标准标题提供<cstddef>,我认为我们可以认为如果没有包含它<cstddef>应该删除任何size_t可用的保证.一个程序.
但是,根据第一个引用,我们可以无论如何获得类型的表达式std::size_t.
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'
}
Run Code Online (Sandbox Code Playgroud)
std::size_t该程序不可见,但sizeof(0)仍然给我们一个?真?
因此,说它5.3.3/6是有缺陷的,并且它实际上具有"与std::size_t解决的任何类型相同的类型",而不是 std::size_t它本身,这是不正确的吗?
当然,如果 …