&安培;&安培;&安培;运算符作为代码块胶

时间:2013-12-29 16:49:19

标签: javascript c++ ruby operator-overloading

有没有办法让&&&表现为可以将操作连接到一个代码块的运算符?

在编码时我想到了这一点,并想知道我是否可以以某种方式实现它。

我想要实现的是使代码更简洁。 例如:

 for (i=0;i<n;++i)
    arr[i][0]+=2; &&& arr[i][1]+=3; &&& arr[i][2]=45;

我不想听到如何使用额外的for循环或使用{}代替。

我想知道在ruby中是否可以使用c ++,javascript或(如果不是其中之一)这样的运算符

编辑:我知道这是一件坏事,但我想知道是否有可能完成。 我虽然这是在编码时获得乐趣的重点。

3 个答案:

答案 0 :(得分:6)

好吧,&&&被列为&&,后跟&,因此您可以使用指针重载&&运算符:

struct X
{
    int x;

    X& operator=(int i)
    {
        x = i;
        return *this;
    }

    X& operator+=(int i)
    {
        x += i;
        return *this;
    }

    X& operator&&(X*)
    {
        return *this;
    }
};

不幸的是,运算符优先级会受到阻碍,因此您必须将赋值括起来:

int main()
{
    const int n = 10;
    X arr[n][3];

    for (int i = 0; i < n; ++i)
    {
        (arr[i][0]+=2) &&& (arr[i][1]+=3) &&& (arr[i][2]=45);
    }
}

(但当然,在他们正确的思想中,没有人会在生产代码中使用这样的可憎之类。)

答案 1 :(得分:5)

您可以改为使用,运算符:

arr[i][0]+=2, arr[i][1]+=3, arr[i][2]=45;

但这是一种非常丑陋的编码方式(您的提案也是如此)。引入一个块并将每个块作为单独的语句将更容易阅读。

答案 2 :(得分:1)

它不是语言定义的一部分,所以不 - 你不能随意定义新的语法 - 这将是不同的语言。你可以创建一个预处理器或翻译器来将你的新语言转换为有效的C ++,但我几乎看不出它本身会起什么作用。