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

标签 c++ c++11 std language-lawyer

阅读以下标准段落:

[C++11: 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 ]

现在:

[C++11: 18.2/6]: The type size_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/

相关文章:

c++ - g++、位域和 ADL

c++ - 实时应用的OpenCV fastNlMeansDenoising的替代方法?

c++ - 两个字符串之间的数学运算

c++ - 通过引用 TBB 任务传递函数时无法返回值

c++11 - 如何在 C++ 中将 insert 插入到 <string, vector<pair::<string, string>>> 的映射中?

c++ - 在使用 std::find() 的不成功搜索中返回特定值而不是 0

c++ - 在 C/C++ 中将天文数字大的数字转换为人类可读的形式

c++ - std::function 与标准函数

C++: atof() 有错误的行为

c++ - 是否对 boost 进行了优化以使用 C++11 中的可变参数模板?