我正在阅读Stanley B. Lippman的C ++ Primer一书,在变量和基本类型部分,我看到了范围运算符::
。
我已经阅读了一些关于运算符重载的内容,我认为它在特殊情况下非常有用,但是当我在互联网上搜索时,我发现我根本无法重载::
运算符。
在this post中,我发现.
运算符可能过载。但是,这可能会导致对操作是否适用于对象重载.
或.
引用的对象的问题。
因此,我认为可能有一种方法可以重载::
。
但如果不能,有人可以解释我为什么吗?
我对:: operator的想法的一个例子:
#include <iostream>
/*
*For example:
*I wanna increase 1 unit every time
*I call the global variable r doing ::r
*insede of the main function
*/
int r = 42;
int main()
{
int r = 0;
std::cout << ::r << " " << r << std::endl; //It would print 43 0 after the operator overload
return 0;
}
答案 0 :(得分:8)
你不能超载它。
范围“运算符”不同于所有运算符在运行时都不执行任何操作,它会影响编译时的名称查找,并且您无法更改它,因为它的工作只是告诉编译器在哪里查找名称。 / em>
这就是为什么你不能超载它。
例如:
#include <iostream>
#include <string>
std::string s = "Blah";
int main()
{
std::string s = "World";
::s = "Hello ";
std::cout << ::s << s << std::endl;
return 0;
}
答案 1 :(得分:7)
您无法重载::
的原因是标准禁止它。第13.5.3节有
以下运算符无法重载:
.
.*
::
?: