gpt4 book ai didi

c++ - 关于 C++ 中命名空间的极其基本的问题

转载 作者:行者123 更新时间:2023-12-04 16:52:37 25 4
gpt4 key购买 nike

using namespace X;
cout << var;
using Y::var;
cout << var;
假设我有一个命名空间 X 和一个命名空间 Y,它们都包含一个名为 var 的 int 类型变量。当我说 using namespace X;我想象发生的事情是,如果我使用一些不在全局名称范围内的变量,基本上会发生什么,一切正常,我将在 namespace X 中查找 var。但现在我也使用 Y::var这究竟是什么意思?这只是说 var 与 Y::var 相同吗?但是在那种情况下 using namespace X 发生了什么它甚至没有在那里寻找 var 因为我说我正在使用 Y::var ?

最佳答案

在 using 指令之后

using namespace X;
编译器使用非限定名称查找来查找名称 var在以下语句中使用
cout << var;
由于 using 指令,它将找到变量 var在命名空间 X .
这个使用声明
using Y::var;
引入变量 var来自命名空间 Y在当前作用域和下一个语句中
cout << var;
将使用变量 var来自命名空间 Y .
这是一个演示程序。
#include <iostream>

namespace X
{
int var = 1;
}

namespace Y
{
int var = 2;
}

int main()
{
using namespace X;

std::cout << "var = " << var << '\n';

using Y::var;

std::cout << "var = " << var << '\n';
}
程序输出是
var = 1
var = 2
那是引入变量 var 的 using 声明在函数 main 的块作用域中隐藏了变量 var 的声明在命名空间 X 中声明.
事实上,下面简化的演示程序在本质上与上面的程序在名称查找方面的行为类似。
#include <iostream>

int var = 1;

int main()
{
std::cout << "var = " << var << '\n';

int var = 2;

std::cout << "var = " << var << '\n';
}

关于c++ - 关于 C++ 中命名空间的极其基本的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69632161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com