C++ 在C++;
另一方面,这也适用于:C++ 在C++;,c++,function,operator-keyword,C++,Function,Operator Keyword,另一方面,这也适用于: int a, b, c; //do stuff. For e.g., cin >> b >> c; c = a + b; //works c = operator+(a,b); //fails to compile, 'operator+' not defined. 甚至可以直接调用基本类型(如int)的运算符+(和其他运算符)吗 如果是,如何进行 如果没有,有C++的引用语句,这说明这是不可行的吗?李> 来自 我
int a, b, c;
//do stuff. For e.g., cin >> b >> c;
c = a + b; //works
c = operator+(a,b); //fails to compile, 'operator+' not defined.
- 甚至可以直接调用基本类型(如int)的运算符+(和其他运算符)吗
- 如果是,如何进行 <>如果没有,有C++的引用语句,这说明这是不可行的吗?李>
首先,将内置操作符作为函数调用不会简单地起作用,因为语言规范从未说过这样的函数存在。内置操作符就是操作符。它们背后没有实现函数,只是因为语言规范从未暗示它们的存在。基于函数的实现只针对重载运算符 第二,在重载解析过程中,内置运算符实际上由其类似于虚函数的对应项表示,但禁止“显式”调用内置运算符的措辞在13.6/1中出现 候选运算符的功能是 表示内置运算符 第5条中的定义在 本款。这些候选人 函数参与到操作符中 过载解析过程为 如13.3.1.2所述,使用 无其他用途
我很好奇,你为什么要这么做?我正在尝试帮助别人学习C++,我在谈论操作符的行为就像函数。我想展示一段称为运算符+(2,3)而不是2+3的代码,以说明当我意识到它没有像我预期的那样工作时的想法。我理解这一点。我并不是在试图重载一个基本运算符。我只是试图通过调用基本运算符的函数运算符名来调用它。@Vatsan:
运算符函数应该是非静态成员函数或非成员函数,并且至少有一个类型为类、类引用、枚举的参数,或者引用枚举。
-这是一个非常明确的要求。很明显,禁止我声明不符合这些要求的新运算符函数。它没有告诉我为什么我不能使用运算符函数语法来调用一个基本运算符,它恰好作为语言的一部分存在。@Vatsan:我认为它不存在,除非你显式声明它,并且你不能为非类类型声明它。这是有意义的。我暗自希望标准中有一些要求,即只禁止重新定义基元运算符,但调用语法对所有基元运算符都是一样的,因为它只是语法上的糖分,除了可读性之外,不会对任何东西产生明显的影响。谢谢正是我想要的。谢谢
class Foo
{
int x;
public:
Foo(int x):x(x) {}
Foo friend operator+(const Foo& f, const Foo& g)
{
return Foo(f.x + g.x);
}
};
Foo l(5), m(10);
Foo n = operator+(l,m); //compiles ok!