gpt4 book ai didi

c++ - 两个 "using"可以碰撞吗?

转载 作者:太空狗 更新时间:2023-10-29 20:42:57 25 4
gpt4 key购买 nike

所以我必须使用 Boost 库的一些成员和 std 命名空间中的一些成员。现在,我声明了 using boost::asio::ip::tcp; 并使用 std:: 调用适当的成员,例如 tcp::iostream 服务器()。有什么理由我不应该添加另一个 using,即 using namespace std; 然后在没有 的情况下调用所有 std std:: 前缀?这两者会不会以某种方式发生碰撞或导致故障?

最佳答案

如果使用 using 指令从 std 命名空间(尤其是在命名空间范围和/或头文件中)导入名称通常被认为是一种不好的做法), 因为它很容易导致名称冲突,请考虑以下程序:

namespace A { void foo() { } }
namespace B { void foo() { } }

int main()
{
using namespace A;
using namespace B;
foo();
}

编译器应该如何解析对 foo() 的调用?好吧,它不会。这是不明确的,因为 A::foo()B:foo() 现在都可以称为不合格的 foo() .

如果在 std 命名空间和全局命名空间(或在您有 using 指令的任何其他命名空间)中存在具有相同名称的实体,则歧义由于可能会出现名称冲突。

在您的特定情况下,using 指令例如:

using namespace std;

不太可能与您的using声明引入的名称tcp发生冲突(注意,using 声明只导入一个特定名称,因此更可取)。

然而,它仍然被认为是糟糕的编程风格,你不应该这样做,不管你是否已经有一些其他的 using 指令或 using 声明.

关于c++ - 两个 "using"可以碰撞吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17132730/

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