标准操作员功能在哪里定义?

时间:2016-01-26 11:47:22

标签: c++ operators

据我了解

if (n>1)

代表

if (greater(n,1))

>定义的函数在哪里?

2 个答案:

答案 0 :(得分:1)

在任何地方都没有“定义”。它是编译器和语言不可或缺的一部分。 intfloat等是标准类型,因此没有源文件描述它们,但它们是在编译器中实现的。
在上述情况中,>直接编译为本机指令集中的指令。

大写仅适用于n属于这些标准类型之一。如果n是用户定义类型的对象,如std::complex,则该类可以像您提到的那样自由地实现运算符(在std::complex::operator>成员函数的形状中);只有没有greater函数,但之前调用它。默认情况下,此成员函数未实现,因此将其应用于任意用户定义的对象将无法确定。

答案 1 :(得分:1)

n>1不代表greater(n,1)。在某些情况下,可以代表operator>(n,1)n.operator>(1)

基本规则是,如果表达式中的运算符的操作数没有类或枚举类型,则假定运算符是内置的。内置运算符不是函数,它们的含义直接在标准中定义(具体来说,第5章)。

如果其中一个操作数类或枚举类型,则可能会声明一个用户定义的操作符函数来实现操作符。或者,可以使用一些用户定义的转换来转换为使用内置运算符的适当类型。

所以operator>(n,1)未在某处定义,假设n的类型与int中使用的内置运算符兼容。否则,可以在某处将operator>(decltype(n), int)声明为自由函数,或者可以在operator>(int)类型的定义中声明n,或者可以从{{decltype(n)进行一些用户定义的转换。 1}}以便可以使用内置运算符。