与c?中的链接相比,c ++链接中的命名空间有什么影响?
是否可以通过使用命名空间创建一个与外部链接具有内部链接的名称。类似地反过来。
答案 0 :(得分:3)
通常,在名称被修改并转到链接器之前,名称空间名称会被添加到任何封闭实体的名称之前。
如果在不同的命名空间中有两个具有相同签名的函数,则它们可以很好地链接到一个文件中。如果你有两个具有相同名称的类和至少一个具有相同签名的方法,并且这些类位于不同的名称空间中 - 它们再次链接在一起就好了。
答案 1 :(得分:1)
C和C ++都允许对象和函数具有静态文件链接,也称为内部链接。 C ++,支持使用未命名的命名空间代替文件范围,这是编译器的好处。 static是一个连接修饰符。因此,如果您需要文件范围和内部链接,则应在C ++中同时使用命名空间和静态。但是,在C中,您只需要使用static关键字来实现相同的目标。
/* C and C++ code */
static int bufsize = 1024;
static int counter = 0;
static long square(long x)
{
return (x * x);
}
在C ++中执行此操作的首选方法:
// C++ code
namespace /*unnamed*/
{
static int bufsize = 1024;
static int counter = 0;
static long square(long x)
{
return (x * x);
}
}