1
我注意到我的C++程序编译得很好,无论我使用::size_t
还是std::size_t
。我可以交换使用它们,根本没有任何问题,所以看起来像其中一个是typedef
。为什么在全局范围和命名空间std中定义了size_t?
举个例子,考虑下面的代码,它使用全球size_t
(这是整个文件,没有using
S和其他的东西):
#include <iostream>
int main() {
::size_t x = 100;
std::cout << x << std::endl;
}
下一个代码使用size_t
在std
:
#include <iostream>
int main() {
std::size_t x = 100;
std::cout << x << std::endl;
}
如预期的那样编译正常并输出100
。
我的印象是标准库中的所有东西都放在命名空间std
中,但显然情况并非如此。这是为什么?
注意:ptrdiff_t
,intN_t
和uintN_t
也是如此。
也许模糊,如果不是有趣的读取:https://stackoverflow.com/questions/237370/does-stdsize-t-make-sense-in-c和https://stackoverflow.com/questions/42797279/what -to-do-with-size-t-vs-stdsize-t – Tas
@Tas现在我还有一个问题。如果我删除'#include'并添加'#include ',则不会定义':: size_t'。所以看起来'#include '在内部'#include ',至少在GCC上。 –
Bernard
@Bernard,C++标准没有对任何标准库头中包含的附加头进行限制。所以,海湾合作委员会的行为是不符合标准 – WhiZTiM