以下代码在godbolt在线编译器上使用最新的MSVC、GCC和CLang可以完美编译,我想知道为什么:
cppreference声称,如果成员函数在类外定义,则必须在该类的命名空间中定义。请参见有关成员函数的cppreference页面的顶部。
但是,编译器仍然接受该代码。三个独立的编译器很不可能都有相同的错误,对吧?那么,它们接受这样的代码背后是否有充分的理由呢?
namespace ns
{
struct Test
{
void foo();
};
}
using namespace ns;
// Alert! Member function defined outside its namespace!
void Test::foo()
{
}
int main()
{
ns::Test obj;
obj.foo();
return 0;
}
cppreference声称,如果成员函数在类外定义,则必须在该类的命名空间中定义。请参见有关成员函数的cppreference页面的顶部。
但是,编译器仍然接受该代码。三个独立的编译器很不可能都有相同的错误,对吧?那么,它们接受这样的代码背后是否有充分的理由呢?
using namespace ns;
时会发生什么? - Tarick Wellingusing namespace ns;
的意思是在下面的作用域中,可以在任何函数/变量之前加上ns::
。 - Tarick Welling