【发布时间】:2015-11-13 06:06:38
【问题描述】:
我正在阅读 Stanley B. Lippman 的《C++ Primer》一书,在变量和基本类型部分我看到了范围运算符::。
我已经阅读了一些关于运算符重载的内容,我认为它在特殊情况下可能非常有用,但是当我在互联网上搜索时,我发现我根本无法重载 :: 运算符。
在this post 中发现. 操作符可以重载。但是,这可能会导致有关操作是针对重载. 的对象还是针对. 引用的对象的问题。
因此,我认为也许有一种方法可以重载::。
但如果不能,谁能解释一下为什么?
我对 :: 运算符的想法的一个例子:
#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;
}
【问题讨论】:
-
作用域“operator”不像所有的操作符在运行时什么都不做,它会影响编译时的名字查找,这就是为什么你不能重载它。
-
@Borgleader 我不能让它在运行时做点什么?
-
@GabrielMello 不,因为它唯一的工作就是告诉编译器在哪里可以找到名称。
-
“我发现 . 运算符可以重载” - 不,
.运算符不能重载。 -
@CaptainObvlious 但如果您看到用户所说的那个问题“原则上可以使用与 -> 相同的技术进行重载。”
标签: c++ c++11 operator-overloading