Typedef 位于匿名命名空间内部/外部?

发布于 2024-08-13 04:23:48 字数 266 浏览 13 评论 0原文

在 .cpp 文件中,有什么区别/偏好吗?

// file scope outside any namespace
using X::SomeClass;
typedef SomeClass::Buffer MyBuf;

速度/秒

namespace { // anonymous
  using X::SomeClass;
  typedef SomeClass::Buffer MyBuf;
}

In a .cpp file, is there any difference/preference either way?

// file scope outside any namespace
using X::SomeClass;
typedef SomeClass::Buffer MyBuf;

v/s

namespace { // anonymous
  using X::SomeClass;
  typedef SomeClass::Buffer MyBuf;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

南城追梦 2024-08-20 04:23:48

我想说,第二种用法相当不常见,至少在我迄今为止看到的代码中是这样(而且我已经看到了相当多的 C++ 代码)。您能解释一下第二种技术背后的原因吗?

通常,您将在 C++ 实现文件中使用匿名名称空间来实现与 C(或 C++,但我们将忽略这一点)中的“static”相同的功能,即限制符号对当前翻译单元的可见性。 typedef 实际上不会生成导出供链接器查看的符号,因为它们不会创建任何可以链接的具体意义上的“具体”内容。

我的推荐?我会选择第一个符号。第二个增加了不必要的复杂性,在我看来,它不会给你带来任何好处。

I would say that the second usage is rather uncommon, at least in the code that I've seen so far (and I've seen quite a lot C++ of code). Could you explain what the reasoning behind the second technique is?

You will normally use an anonymous namespace in a C++ implementation file to achieve the same thing that 'static' would do in C (or C++, but we'll gloss over that), namely restricting the visibility of the symbols to the current translation unit. The typedef doesn't actually produce symbols that are exported for the linker to see as they don't create anything 'concrete' in the sense of anything concrete that you could link against.

My recommendation? I'd go with the first notation. The second one adds an unnecessary complication and in my opinion, doesn't buy you anything.

小ぇ时光︴ 2024-08-20 04:23:48

将 typedef 放置在匿名名称空间中没有多大意义。匿名名称空间的主要用途是通过在其中放置具有外部链接的定义来避免翻译单元之间的符号冲突。

There is not much point in placing typedefs in anonymous namespaces. The main use for anonymous namespaces is to avoid symbol collision between translation units by placing definitions with external linkage in them.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文