&&&&运算符作为代码块胶水

&&& operator as codeblock glue

本文关键字:运算符 代码      更新时间:2023-10-16

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

这是我在编码时想到的事情,想知道我是否可以以某种方式实现它。

我试图实现的是使代码更简洁。例:

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

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

我想知道这样的运算符在 c++、javascript 或 ruby 中(如果不在这 2 个之一中)中是否可行

编辑:我知道这是一件坏事,但我想知道是否有可能这样做。我认为这就是在编码时享受乐趣的全部意义。

好吧,&&&被词法化为 && 后跟 & ,因此您可以重载 && 运算符,并获取指针:

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);
    }
}

(但当然,没有一个头脑正常的人会在生产代码中使用这样的可憎之物。

您可以使用 , 运算符:

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

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

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