全局及命名空间作用域中禁用 using 指令
4.13 ID_forbidUsingDirectives
通过 using 指令将其他命名空间中的名称一并引入当前命名空间,是对命名空间机制的破坏,会造成难以预料的冲突与混乱。
示例:
// In global namespace
using namespace std; // Non-compliant
using namespace myspace; // Non-compliant
namespace myspace {
using namespace hisspace; // Non-compliant
}
在函数作用域内可适当放宽要求,如:
void foo() {
using namespace myspace; // Let it go
type x; // Using myspace::type
some_fun(x); // Using mysapce::some_fun
}
建议用 using 声明 代替 using 指令:
void foo() {
using myspace::type; // Compliant, using-declaration
using myspace::some_fun; // Compliant, using-declaration
type x;
some_fun(x);
}
相关
参考
C++ Core Guidelines SF.6
MISRA C++ 2008 7-3-4