据我了解
if (n>1)
代表
if (greater(n,1))
>
定义的函数在哪里?
答案 0 :(得分:1)
在任何地方都没有“定义”。它是编译器和语言不可或缺的一部分。 int
,float
等是标准类型,因此没有源文件描述它们,但它们是在编译器中实现的。
在上述情况中,>
直接编译为本机指令集中的指令。
大写仅适用于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}}以便可以使用内置运算符。