为什么我不能重载::运算符?

时间:2015-08-19 19:25:12

标签: c++ c++11 operator-overloading

我正在阅读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;
}

2 个答案:

答案 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;
}

See on Coliru

答案 1 :(得分:7)

您无法重载::的原因是标准禁止它。第13.5.3节有

  

以下运算符无法重载:

     

. .* :: ?: