C++:在函数参数列表中使用或不使用命名空间

c++: use or not use namespace in function argument list

本文关键字:命名空间 列表 函数 参数 C++      更新时间:2023-10-16

考虑这样一个简单的例子:

namespace foo {
    struct Foo {};
    struct Boo {
        void f(Foo);
    };
}
using foo::Boo;
void Boo::f(Foo)
{
}

clanggcc编译这样的代码而没有错误(-pedantic -std=c++11(,但是VC++-2015报告有关Foo输入void Boo::f(Foo)的错误 - Foo声明不足的标识符。如果像这样重写代码:void Boo::f(foo::Foo)它编译得很好,但是在这种重写之后它也编译了什么有趣的:

namespace foo {
    struct Foo {};
    struct Boo {
        void f(Foo);
    };
}
void foo::Boo::f(Foo)
{
}

根据c++11标准,它是VC++2015错误吗?

不,这不是 MSVC 错误。 您应该正确设置标识符的命名空间。