c++ - 未命名命名空间优于静态命名空间?

标签 c++ static namespaces static-variables static-functions

未命名的命名空间如何优于 static 关键字?

最佳答案

您基本上是指 C++03 标准中的第 7.3.1.1/2 节,

The use of the static keyword is deprecated when declaring objects in a namespace scope; the unnamed-namespace provides a superior alternative.

请注意,该段落已在 C++11 中删除。 static 函数已按标准不再被弃用!

不过,未命名的 namespace 优于 static 关键字,主要是因为关键字 static 仅适用于 variables 声明和函数,而不是用户定义的类型

以下代码在 C++ 中有效:

//legal code
static int sample_function() { /* function body */ }
static int sample_variable;

但此代码无效:

//illegal code
static class sample_class { /* class body */ };
static struct sample_struct { /* struct body */ };

所以解决方案是,未命名(又名匿名)namespace,就是这样:

//legal code
namespace 
{  
     class sample_class { /* class body */ };
     struct sample_struct { /* struct body */ };
}

希望它能解释为什么未命名的 namespace 优于 static

<罢工> 另外,请注意,在命名空间范围内声明对象时(根据标准),不推荐使用 static 关键字。

关于c++ - 未命名命名空间优于静态命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4422507/

相关文章:

c++ - 在 C++ 中缓存浮点值

static - 扩展 Spring Boot WebMvcConfigurationSupport 时出现静态资源问题

c - 变量的外部和静态链接的奇怪行为

c++ - 无法在 ROS 节点中使用文件系统

ruby-on-rails - 使子域有一个命名空间作为根?

c++ - C++中未定义数量的参数

c++ - 在模板本身中检索最里面的模板类型

c++ - std::sort 比较器,它查看元素的(原始)索引

java - 使用导入静态字段是一种好的编程习惯吗?

namespaces - 设置 ReSharper 将 'using' 导入放在命名空间之外