【发布时间】:2021-12-29 13:39:16
【问题描述】:
我想创建一个运算符函数,它接受一个整数和一个双精度作为参数,如果整数小于双精度则返回 true,否则返回 false。 我来自一门名为 Ada 的编程语言,此类任务将以这种方式执行,但与 C++ 似乎不一样。
是否可以在 C++ 中执行此操作,如果可以,我的代码到底有什么问题?
这是我得到的错误:
12 | bool operator <(int const lhs,
| ^~~~~~~~
这是我的代码:
#include <iostream>
using namespace std;
bool operator <(int const lhs,
double const rhs)
{
if (double(lhs) < rhs)
{
return true;
}
return false;
}
int main()
{
int lhs {};
double rhs {};
cin >> lhs >> rhs;
if (!rhs < lhs)
{
cout << "False";
}
}
在我的主程序中,如果rhs < lhs = false,我尝试输出“False”
【问题讨论】:
-
cin >> lhs >> rhs;? -
在 C++ 中,运算符函数的重载要求至少有一个参数是用户定义的类型。不可能用两个参数作为基本类型重载二元运算符函数(如
int、float等)。这样做的设计原理是防止语言是可变的(例如,不可能改变比较float和int与语言内置的含义,所以[说]表达式@987654329如果a > b),@ 给出一个真实的结果。 -
cin >> lhs > rhs;被解释为(cin>>lhs) > rhs;并且由于>>运算符引用std::istream和int返回对std::istream的引用,因此以下代码将产生相同的结果:std::cin >> lhs; std::cin > rhs;但正如编译器告诉你的那样,这里没有适用的>运算符... -
这是我的一个错字。我更新了我的问题并更新了我的错误消息。我只收到一条错误消息,它没有给我很多信息...
-
由于这两个参数都不是用户定义的类型,所以您不能执行
operator<,您需要编写自己的bool is_less(int const lhs, double const rhs)函数。您是否打算使用(double, int)调用采用(int, double)的函数?编译器将进行隐式转换。来自 Ada,你可能会发现 C++ 有点像狂野的西部。