回答編集履歴

1

書き忘れ追記

2016/01/26 13:55

投稿

catsforepaw
catsforepaw

スコア5938

test CHANGED
@@ -9,3 +9,15 @@
9
9
 
10
10
 
11
11
  下の二つのコードでリンクエラーにならないのは、main.cppのvarとsub.cppのvarが異なる名前空間に定義されているためです。つまり、mainの方は**「グローバルな名前空間」**で、subの方は**「nsという名前の名前空間」**という区別がつきます。より詳しくいうと、C++はソースをコンパイルすると「名前修飾」あるいは「マングリング」と呼ばれる手法で名前空間別にリンクのためのシンボル名を変えているので、リンクエラーにならないのです。
12
+
13
+
14
+
15
+ 書き忘れました。追記です。
16
+
17
+
18
+
19
+ > これは規格上の正しい動きであるのか、それとも未定義の動作なのでしょうか。
20
+
21
+
22
+
23
+ 正しい動きです。