g ++创建const的几个符号?

nis*_*sen 4 c++ gcc

在我的一个标题(C++)文件中,我改变了

   #define TIMEOUT 10
Run Code Online (Sandbox Code Playgroud)

更多(?)C++方式:

const int TIMEOUT = 10;
Run Code Online (Sandbox Code Playgroud)

但是,似乎g ++(v 4.4.3)现在在二进制文件中多次包含此符号.

$ nm -C build/ipd/ipd |head
08050420 T ToUnixTime
08050470 T ParseTime
080504c0 T ParseISOTime
080518e4 r TIMEOUT
080518ec r TIMEOUT
080518f4 r TIMEOUT
080518fc r TIMEOUT
080503e0 T HandleMessage
Run Code Online (Sandbox Code Playgroud)

怎么会 ?

Jam*_*lis 6

您可能已将标题包含在四个单独的翻译单元(.cpp文件)中.

未声明的命名空间范围const变量extern是隐式的static,因此每个包含标头的转换单元都有一个.