gpt4 book ai didi

c++ - "using namespace"用于定义全局函数

转载 作者:太空狗 更新时间:2023-10-29 21:09:55 25 4
gpt4 key购买 nike

在源文件中定义类成员函数时,我们可以使用 using namespace ns1::ns2::...::nsx 来避免必须完全限定函数名称。

例如

// Header file - foo.hpp
namespace ns1::ns2 {
class FooClass {
void fooMethod();
}
}

// Source file - foo.cpp
#include "foo.hpp"
using namespace ns1::ns2;
void FooClass::fooMethod() {
// do something
}

但是,我最近在尝试定义全局函数时遇到了困惑。

请参阅以下示例。

// Header file - bar.hpp
namespace ns1::ns2{
void barFunction(); // <-- compile error: undefined reference
}

// Source file - bar.cpp
#include "bar.hpp"
using namespace ns1::ns2;
void barFunction(){
// do something
}

我期望编译器将 bar.cpp 中的定义推断为 bar.hpp 中定义的 ns1::ns2::barFunction 的定义。但它不会那样做。 (如果我在定义中使用完全限定名称,一切正常)。

这是预期的行为还是我做错了什么?

最佳答案

这是预期的行为。

[namespace.udir]

3 A using-directive does not add any members to the declarative region in which it appears.

这意味着在您定义它时,全局命名空间中没有 barFunction 的声明。这使得该定义成为此类函数的第一个也是唯一一个声明(在全局命名空间中)。

这是设计使然,因为 using 指令通常可以引入比预期更多的名称。所以不要让它践踏它出现的声明区域是好的。

关于c++ - "using namespace"用于定义全局函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56579783/

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