You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++命名空间疑问:为何代码输出为0 1 0而非预期的0 1 2?

问题原因解析

你遇到的问题核心是C++的名字查找优先级规则:当作用域中存在同名的局部变量时,它的优先级会高于通过using namespace引入的命名空间成员。

拆解你的代码执行逻辑:

  • 第一个std::cout << x:直接调用main函数内定义的局部变量x=0,输出0,符合预期。
  • 第二个std::cout << first::x:通过命名空间限定符明确指定调用first命名空间中的x,输出1,无问题。
  • 第三个std::cout << x:虽然你用using namespace second;引入了second命名空间,但main函数的局部作用域中已经存在x,编译器会优先选择局部作用域的变量,因此输出的还是局部的x=0,而非second::x=2。

如果想要得到预期的2,可以直接通过命名空间限定符指定:

std::cout << second::x << std::endl;

或者修改局部变量的名字,避免和命名空间中的变量冲突。

内容的提问来源于stack exchange,提问作者Ryujin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 13:57:33