带有空的算术运算
Arithmetic operation with a void?
本文关键字:算术运算 更新时间:2023-10-16
我知道,如果可能的话,以下内容绝对是一种不好的做法,但我想知道这是否可能。
问题如下:是否有可能在C++(并且编译器不会抛出任何警告)使用返回 void 的函数执行无用的算术运算。
std::vector<int> v;
int i = 42 + v.resize(42);
/* How to transform the last line to execute resize and to have i = 42 */
我知道这是愚蠢的,但这不是问题...
我不确定这是否有意义,但您可以在此处使用逗号运算符:
int i = (v.resize(42), 42);
您可以使用逗号运算符:
int i = (v.resize(42), 42);
对于 GCC,您可以使用其语句表达式扩展:
int i = ({v.resize(42); 42;})
在标准 C++11 中,您可以使用并调用匿名闭包:
int i = ([&v]() {v.resize(42); return 42;}());
类型 void 没有值,因此不能在算术表达式中使用。
在我看来,杆件功能resize
的设计很糟糕。它应该返回对象本身,而不是void
。在这种情况下,您可以例如编写
int i = v.resize(42).size();
我在讨论C++标准的论坛上指出了这一点。
至于你的问题,你可以写
int i = ( v.resize(42), v.size() );
使用逗号运算符。
或者也许最好将这两个调用分开
v.resize(42);
int i = v.size();
不明白重点,但这是另一种方式
std::tie(i, std::ignore) = std::make_tuple(42, (v.resize(42),1) );
你也可以做:
if ((i=42)) v.resize(42);
不要忘记
do { v.resize(42); } while (!(i=42));
和最爱
(i=42) ? v.resize(42) : i;
或者(帖子中唯一严肃的 c++)
int i(0);
std::vector<int> v(i=42);
来吧,这没有尽头
.....
相关文章:
- 算术运算的结果类似于:C浮点变量中的1/3
- 更快的C++算术运算
- 为什么循环体中的一个基本算术运算执行得比两个算术运算慢
- 为什么对无符号字符进行算术运算会将它们提升为有符号整数
- 如何在 C++ 中计算字符串的算术运算
- 复数的算术运算
- 具有非常非常大数字的算术运算
- 如何使用C++中的处理器指令来实现快速算术运算
- boost::spirit::x3 phrase_parse 在进入 Vector 之前进行算术运算
- C++中混合数据类型的算术运算
- C++:编译器是否优化整数 + 浮点算术运算?
- 如何在特征中对二维数组的列执行简单的算术运算
- 使用数字列表和算术运算获取目标数字
- C++:“enable_if”用于限制支持特定算术运算的类型
- 如何正确避免 SIGFPE 和算术运算溢出
- 编译器用于编译 128 位整数的基本算术运算的技巧
- 将临时值存储为某种数据类型时,算术运算的标准规则是什么
- 相同的算术运算在 C++ 和 Python 中给出不同的结果
- 带有空的算术运算
- 算术运算和编译器优化