与 c 中的链接相比,c++ 链接中的命名空间有什么影响?
是否可以仅通过使用命名空间来创建一个具有内部链接到外部链接的名称。类似地反过来。
通常,命名空间名称会在名称被破坏并进入链接器之前添加到任何封闭实体的名称之前。
如果您在不同的命名空间中有两个具有相同签名的函数,它们可以链接到一个文件中。如果您有两个具有相同名称的类和至少一个具有相同签名的方法,并且这些类位于不同的命名空间中——它们再次链接在一起就好了。
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);
}
}