相关疑难解决方法(0)

`sizeof`*真的*评估为`std :: size_t`吗?它可以?

采取以下标准段落:

[C++11: 5.3.3/6]:结果sizeofsizeof...是类型的常量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它本身,这是不正确的吗?

当然,如果 …

c++ std language-lawyer c++11

60
推荐指数
4
解决办法
3173
查看次数

标签 统计

c++ ×1

c++11 ×1

language-lawyer ×1

std ×1