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

《C++之旅》第二版中using-directive是否导致无法后续限定命名空间名称?

关于《C++之旅》第二版中using-directive引文的澄清

引文的真正含义

原文中“使用using-directive后,我们将失去选择性使用该命名空间中名称的能力”,并不是指无法通过命名空间限定符(如std::)访问名称,实际指向的是:

  • 当当前作用域存在与命名空间内同名的标识符时,你无法再通过不加限定符的方式选择命名空间中的版本。
  • 举个冲突场景的例子:
    #include <iostream>
    using namespace std;
    
    void cout() { /* 局部同名函数 */ }
    
    int main() {
        // cout << "test\n"; // 编译错误:无法区分是局部的cout还是std::cout
        std::cout << "works\n"; // 依然可以正常使用限定符访问命名空间版本
    }
    
    没有using namespace std;时,直接写cout会提示未定义,但你可以用std::cout明确指定命名空间的版本;而加了using-directive后,直接写cout会因同名冲突无法编译,此时你要么修改局部标识符的名字,要么只能用限定符调用——这就失去了“不加限定符时选择命名空间版本”的灵活性,也就是原文所说的“失去选择性使用的能力”。

你的测试代码为何正常运行

你的测试代码里没有任何与cout同名的局部标识符,所以无论是直接写cout还是std::cout,编译器都能正确解析为std::cout,这完全符合C++语法规则,和原文的表述并不矛盾。

勘误表相关确认

目前《C++之旅》第二版的官方勘误表中并未收录这段内容,说明原文的表述是准确的,只是需要结合上下文正确理解“选择性使用”的具体指向。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 14:52:26