8

.cpp ファイルには、どちらの方法でも違いや好みがありますか?

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

v/s

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

2 に答える 2

9

2 番目の使用法は、少なくとも私がこれまでに見たコード (そしてかなり多くの C++ コードを見てきました) では、かなり珍しいと言えます。2 番目の手法の背後にある理由を説明していただけますか?

通常、C++ 実装ファイルで匿名名前空間を使用して、C (または C++ ですが、それについては詳しく説明します) で 'static' が行うのと同じことを達成します。つまり、シンボルの可視性を現在の翻訳単位に制限します。 . typedef は、リンクできる具体的なものという意味で「具体的な」ものを作成しないため、リンカが確認できるようにエクスポートされるシンボルを実際に生成しません。

私の推薦?私は最初の表記で行きます。2 番目のものは不必要な複雑さを追加し、私の意見では、何も購入しません。

于 2009-12-05T14:49:01.810 に答える
5

匿名の名前空間に typedef を配置してもあまり意味がありません。匿名名前空間の主な用途は、外部リンケージを含む定義を配置することにより、翻訳単位間のシンボルの衝突を回避することです。

于 2009-12-05T14:49:01.483 に答える