c++ - 访问嵌套命名空间中的全局变量
问题描述
我对 c++ 很陌生,并且在命名空间方面遇到了麻烦。
#include <iostream>
int x = 10;
namespace ns {
int x = 5;
namespace ns_nested {
int z = x; //z is assigned a value of 5??
}
}
int main(){
std::cout << ns::ns_nested::z;
}
这打印5
。最初,我认为这是因为我只是将 x 的值更改为5
from 10
。
但是,如果我将 x 的第一个声明更改为const int x = 10
,它仍然会打印5
。
所以,我的问题是双重的:
我虽然在全局范围内声明的变量是......嗯......全局的,因为只有一个实例可供所有人使用。那么,为什么/我能够再次声明具有相同名称的变量的实例?
如果我要将值分配给全局声明
z
的值x
而不是外部命名空间中的值,我会怎么做?
解决方案
1)我虽然在全局范围内声明的变量是......嗯......全局的,因为只有一个实例可供所有人使用。那么,为什么/我能够再次声明具有相同名称的变量的实例?
namespace ns {
int x = 5;
namespace ns_nested {
int z = x; //z is assigned a value of 5??
}
}
这里 x 不是全局命名空间,它在命名空间 ns 下
2)如果我要将 z 的值分配给全局声明的 x 的值,而不是外部命名空间中的值,我会怎么做?
看到这个你可能会有想法
#include <iostream>
const int x = 10;
namespace ns
{
int x = 5;
namespace ns_nested
{
int z1 = ::x; //global namespace
int z2 = ns::x; //ns namespace
}
}
int main()
{
std::cout << ns::ns_nested::z1<<std::endl;
std::cout << ns::ns_nested::z2<<std::endl;
}
推荐阅读
- flutter - Flutter - 行内有 3 个小部件,最后一个右对齐
- jekyll - 带有“包含”表达式的 Jekyll `where_exp` 过滤器
- python - 在python中将对象列转换为日期时间列
- dax - 如何使用两个日期维度表创建 DAX 查询
- python - 将整数添加到列表中,同时将由空格分隔的数字字符串转换为整数
- python - Python - 如何为嵌套字典编写模式?
- angular - ngFor 仅考虑每 n 个元素的最佳方法
- python - Python matplotlib - 日期时间值系列中的无值
- swiftui - 如何在 SwiftUI 中使用 LaTeX 创建数学公式文本视图?
- php - Laravel:与雄辩模型的模拟关系