在C++头文件中是否安全(和正确)以在命名空间中使用using声明,如下所示:
#include <boost/numeric/ublas/vector.hpp>
namespace MyNamespace {
using boost::numeric::ublas::vector;
vector MyFunc(vector in);
}
Run Code Online (Sandbox Code Playgroud)
即,正确地包含在MyNamespace块中的"使用boost :: numeric :: ublas :: vector",还是会污染包含此标头的任何文件的命名空间?
考虑以下:
#include <iostream>
namespace X
{
void operator ""_test(unsigned long long x)
{
std::cout << x;
}
}
int main()
{
using namespace X;
10_test;
// 10_X::test; /* doesn't work */
}
Run Code Online (Sandbox Code Playgroud)
我指的是用户定义的字面运营商内部的namespace X一个显式using namespace X;.有没有明确包含命名空间的方式引用文字运算符?我试过了
10_X::test;
Run Code Online (Sandbox Code Playgroud)
但当然不起作用,因为解析器认为X是指操作符的名称.
X::operator ""_test(10)
Run Code Online (Sandbox Code Playgroud)
工作,但它很笨拙.