&&&&运算符作为代码块胶水
&&& operator as codeblock glue
有没有办法让&&&表现为一个运算符,可以将操作连接到一个代码块中?
这是我在编码时想到的事情,想知道我是否可以以某种方式实现它。
我试图实现的是使代码更简洁。例:
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++,但我几乎看不出这本身有什么目的。
相关文章:
- 为什么模数运算符不适用于该代码
- 逻辑运算符上出现错误代码 a')'
- 如何使基类的运算符对基类的可变参数数可见(请参阅下面的代码)?
- std::string == 运算符在代码中不起作用
- 将 c++ 代码转换为 python,使用运算符?
- 为什么无法覆盖涉及第三方代码的模板类的运算符<<?
- 重载 <= 运算符,但程序以退出代码 -1073741571 (0xC00000FD) 结尾
- 如何翻译这个给定代码中的 ::* 运算符和member_fn?
- 代码块编译错误与运算符<<不匹配
- 为多个签名使用相同的代码重载赋值运算符?
- 赋值运算符在我制作类模板时使代码崩溃
- 在使用具有相等运算符定义的抽象类时,如何定义父类以减少代码重复?
- 删除运算符如何在我的代码中工作
- 在混合 c 和 c++ 代码中使用运算符 new
- 任何机构都可以在运算符重载中解释这行代码
- 没有运算符"[]"匹配这些操作数/没有模板化代码
- 试图重写代码以包括模量运算符
- 重载新运算符 - 此代码不应产生错误
- Visual studio:E0349 没有运算符<<匹配这些操作数(但代码中没有字符串)
- C++类型转换运算符代码,在 Visual Studio 2012 中无法编译,但在 Visual Studio 2005 中工作正常