在c+中定义新运算符+; 我们可以在C++中定义自己的算子吗?< /P>

在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

我需要将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 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;
}