在C++中显式调用原始运算符函数

Vat*_*san 7 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. 
Run Code Online (Sandbox Code Playgroud)

这另一方面起作用 -

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! 
Run Code Online (Sandbox Code Playgroud)
  • 甚至可以直接调用基本类型的运算符+(和其他运算符)(如int)吗?
  • 如果有,怎么样?
  • 如果没有,是否有一个C++参考措辞,明确表明这是不可行的?

AnT*_*AnT 8

首先,将内置运算符作为函数调用将不起作用,因为语言规范从未说过存在这样的函数.内置运营商只是运营商.它们背后没有实现功能,因为语言规范从未暗示它们的存在.基于函数的实现仅适用于重载运算符.

其次,在重载解析期间,内置运算符确实由它们虚构的函数类似对应物表示,但禁止"内置运算符"的"显式"函数式调用的措辞存在于13.6/1中

表示第5节中定义的内置运算符的候选运算符函数在本子条款中指定.这些候选函数参与13.3.1.2中描述的运算符重载解析过程,并且不用于其他目的.