一行

时间:2017-12-15 12:07:35

标签: c++

想询问是否可以在一行中添加(或任何其他运算符)几个变量

int x = 5;
int y = 9;

x += 5;
y += 5;

我试过

x, y += 5;

哪个不起作用,所以我想知道是否有办法实现这种行

6 个答案:

答案 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;
}

对作为练习留下的任意元组进行推广。