std::size_t n = sizeof( long );
实际上,您还没有问过上面的具体做法是什么。使用 size_t,使用 std 命名空间进行限定,...
正如 C++ 标准所说(18.1), size_t 是标准 header 中定义的类型。我建议放弃关于可能从 C 语言继承的任何想法和印象。C++ 是一种独立且不同的语言,最好这样考虑。它有自己的标准库,并且 C++ 标准库的所有元素都在命名空间 std 中定义。但是,可以在 C++ 程序中使用 C 标准库的元素。
我会考虑将其列为肮脏的黑客。C++ 标准规定标头的内容是相同的或基于 C 标准库中的相应标头,但在许多情况下,已应用更改。换句话说,它不是将 C 头文件直接复制和粘贴到 C++ 头文件中。
size_t 不是 C++ 中的内置类型。它是一种定义类型,用于指定使用哪种整数类型作为 sizeof() 运算符的返回类型,因为 sizeof() 的实际返回类型是实现定义的,所以 C++ 标准通过定义 size_t 来统一。
以下程序(不包含)是否可以在所有 C++ 编译器上编译?
size_t foo()
{
return sizeof( long );
}
C++ 标准说(1.4):
库中定义的名称具有命名空间范围(7.3)。AC ++ 翻译单元 (2.1) 通过包含适当的标准库头 (16.2) 来获得对这些名称的访问。
size_t 是在 std 命名空间中定义的名称,因此在这种情况下,使用此名称的每个程序都应包含相应的标头。
接下来,3.7.3章节说:
However, referring to std, std::bad_alloc, and std::size_t is ill-formed unless the name has been declared by including the appropriate header.
Given that, program using size_t but not including header is ill-formed.