想询问是否可以在一行中添加(或任何其他运算符)几个变量
int x = 5;
int y = 9;
x += 5;
y += 5;
我试过
x, y += 5;
哪个不起作用,所以我想知道是否有办法实现这种行
答案 0 :(得分:2)
将“一行”表示“一个语句”,您可以使用表达式分隔符运算符并编写
x += 5, y += 5;
如果要将结果分配给递增的y
的值,则该选项非常有用。虽然如此,即使在1,000,000行的代码库中,也不太可能遇到合法使用这种构造。
如果您想为x, y += 5;
提供所需的含义,我认为如果您能够更改x
和{{1}的类型,就可以实现这一目标一个重载y
的类;你也可能需要一些演员成语:难度也是,
也适用于5
。
如果你能够容忍
那么说x
表示x += y += 5
为x
类型,然后是
Foo
通过测试完成工作
struct Foo
{
Foo(int m):m(m){};
operator int(){return m;}
Foo operator+=(Foo f)
{
m += f.m;
return f; // this is the idiosyncrasy
}
int m;
};
答案 1 :(得分:2)
据我所知,C ++中没有内置的运算符或函数可以将这些操作应用于多个变量,而不仅仅是一个。
您可以定义一个需要三个或更多运算符并调用它的函数:
void multiAdder(int valueToAdd, int& firstVariable, int& secondVariable)
{
firstVariable += valueToAdd;
secondVariable += valueToAdd;
}
void doSomething()
{
int a = 0;
int b = 0;
multiAdder(5, a, b);
}
那就是说,我建议不要做那样的事情,因为它会使你的代码难以阅读和调试。
答案 2 :(得分:2)
没有什么能阻止你在课堂上这样做。
struct Adder {
int x;
int y;
Adder& operator += (int v) {
x += v;
y += v;
}
};
int main() {
Adder x;
x += 5;
}
答案 3 :(得分:1)
您也可以使用元组
tie(x, y) = make_tuple(x + 5, y + 5);
但我认为这种方法没有任何优势,只能在两个不同的方面进行。
答案 4 :(得分:0)
另一种方法是在一行中不使用逗号运算符:
int x = 5;
int y = 9;
x += (y+=5) - (y-5);
答案 5 :(得分:0)
你总是可以自己动手:
template<typename T, typename U>
std::tuple<T&, U&> operator+= (std::tuple<T&, U&> p, int x)
{
std::get<0>(p) += x;
std::get<1>(p) += x;
return p;
}
int main()
{
int s = 3;
float t = 5.5;
std::tie(s, t) += 7;
// 10, 12.5
cout << "s = " << s << ", t = " << t << endl;
}
对作为练习留下的任意元组进行推广。