【问题标题】:Why is there a size_t defined in the global scope as well as in namespace std? [duplicate]为什么在全局范围和命名空间 std 中定义了 size_t? [复制]
【发布时间】:2017-05-31 04:03:20
【问题描述】:

我注意到无论我使用::size_t 还是std::size_t,我的C++ 程序都能正常编译。我可以毫无问题地互换使用它们,因此其中一个似乎是另一个 typedef

例如,考虑以下使用全局 size_t 的代码(这是整个文件,没有 usings 和其他内容):

#include <iostream>
int main() {
    ::size_t x = 100;
    std::cout << x << std::endl;
}

下一个代码在std中使用size_t

#include <iostream>
int main() {
    std::size_t x = 100;
    std::cout << x << std::endl;
}

编译正常并按预期输出100

我的印象是标准库中的所有内容都放在命名空间std 中,但显然情况并非如此。为什么会这样?

注意:ptrdiff_tintN_tuintN_t 也是如此。

【问题讨论】:

  • 也许是骗子,如果不是很有趣,请阅读:stackoverflow.com/questions/237370/…stackoverflow.com/questions/42797279/…
  • @Tas 现在我还有一个问题。如果我删除#include &lt;iostream&gt; 并添加#include &lt;cstddef&gt;,则不会定义::size_t。所以看起来#include &lt;iostream&gt; 内部是#include &lt;stddef.h&gt;,至少在 GCC 上是这样。
  • @Bernard,C++ 标准没有限制任何标准库头文件中包含的附加头文件。所以,GCC 的这种行为并不符合标准
  • 副本是相关的,但似乎并没有真正回答这个问题
  • @WhiZTiM 这让我很惊讶。很多人说只要不using namespace std;,就不会和标准库中的名字发生冲突。

标签: c++ namespaces std c++-standard-library size-t


【解决方案1】:

据我了解,::size_tstd::size_t 略有不同,但基本相同,功能相似。

这里有一个更好的答案:link

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 2015-08-11
    • 1970-01-01
    • 2013-04-13
    • 2016-08-05
    • 2013-02-08
    相关资源
    最近更新 更多