在c+中定义新运算符+; 我们可以在C++中定义自己的算子吗?< /P>
我需要将a%%b定义为(a%b+b)%b,因为有时a%b会给出负值(-239%5=-4),我需要的是正值提醒。因此,如果a%b为负,则将b添加到a%b并返回值。这可以简单地使用(a%b+b)%b来完成。 我试过了 但这是一个错误。 我们可以通过使用函数来实现这一点在c+中定义新运算符+; 我们可以在C++中定义自己的算子吗?< /P>,c++,C++,我需要将a%%b定义为(a%b+b)%b,因为有时a%b会给出负值(-239%5=-4),我需要的是正值提醒。因此,如果a%b为负,则将b添加到a%b并返回值。这可以简单地使用(a%b+b)%b来完成。 我试过了 但这是一个错误。 我们可以通过使用函数来实现这一点 int mod(int a, int b){ return (a%b+b)%b; } 但我想通过定义“for”循环来实现这一点 #define f(i,a,b) for(int i=a;i<b;i++) #为(int
int mod(int a, int b){
return (a%b+b)%b;
}
但我想通过定义“for”循环来实现这一点
#define f(i,a,b) for(int i=a;i<b;i++)
#为(int i=a;i定义f(i,a,b)只能重载现有运算符。但是,可以使用自己的类包装int
,并重载该类的运算符%
:
#包括
结构整型包装器{
显式int_包装器(int n):n_u(n)
{ }
运算符int()常量{
返回n_;
}
私人:
int n_;
};
int运算符%(int_包装lhs,int_包装rhs){
返回((int)左侧%rhs+rhs)%rhs;
}
int main(){
std::cout No。您只能重载现有运算符。任何像样的书籍、教程或类都应该拒绝。是的,谢谢您的回答。这很混乱。您有一个对象看起来是int
(从其名称开始)但是有一个重载的“%”运算符,其行为与“%”的内置运算符类似但不同int@bolov我同意。名字应该是int_加上非负的mod,就像Stroustrup说的:“丑陋操作的丑陋符号”。-)。
#define f(i,a,b) for(int i=a;i<b;i++)
#include <iostream>
struct int_wrapper {
explicit int_wrapper(int n) : n_(n)
{ }
operator int() const {
return n_;
}
private:
int n_;
};
int operator%(int_wrapper lhs, int_wrapper rhs) {
return ((int)lhs % rhs + rhs) % rhs;
}
int main() {
std::cout << (int_wrapper(-239) % int_wrapper(5)) << std::endl;
}