64,649
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
using namespace std;
namespace xm
{
class A
{
public:
int a;
};
A fun(A a);
}
xm::A xm::fun(A a) //返回值为什么一定要加上xm?
{
cout << a.a << endl;
return a;
}
int main()
{
return 0;
}
namespace xm
{
class A
{
public:
int a;
};
A fun(A a);
}
class A
{
public:
int a;
};
在xm命名空间中定义了类A,之后在xm命名空间之外定义了另外一个类A,此时这两个类不冲突。而如果在xm命名空间之外使用类A,则需要使用作用于操作符(::)。
《C++Primer第5版中文版》P74
作用域操作符的含义是:编译器应从操作符左侧名字所示的作用域中搜找右侧那个名字。所以
xm::A
的含义是在xm作用域中的类A。
如果感觉每次使用作用域操作符麻烦,则可以使用using声明。
{
class A
{
public:
int a;
};
A fun(A a);
}
using namespace xm;//using声明
A fun(A a) //此时就不需要作用域操作符了
{
cout << a.a << endl;
return a;
}
请参考
《C++的标准库与命名空间》https://blog.csdn.net/hou09tian/article/details/77429930
《命名空间引起的函数声明问题》https://blog.csdn.net/hou09tian/article/details/70772021