我刚刚遇到了基本上执行以下操作的代码:
int a = (1, 2, 3);
Run Code Online (Sandbox Code Playgroud)
我以前从未见过这种表示法.这是什么意思?
Chr*_*ica 19
它使用逗号运算符,它只是顺序地计算每个操作数表达式(在它们之间引入适当的序列点)并返回最后一个.因此,您的示例实际上相当于int a = 3;
.
但它确实是C和C++中使用最少的运算符之一,不要与函数调用表达式,初始化列表和所有其他地方使用的逗号混淆.一个不那么罕见的用例是for循环(for(...; ...; ++i,++j)
)中的多个增量,即使你可能从未想过这实际上使用了所谓的逗号运算符.
另一个有趣的用例是当试图将多个概念上相关的表达式放入单个语句(如返回)时为了清晰和简洁,就像在旧frexp
的奇怪的指针返回参数的实现中一样(忽略正确的事实) C++只返回一对):
double frexp(double arg, int *exp)
{
if(...)
return *exp=..., result;
...
}
Run Code Online (Sandbox Code Playgroud)
这比同等版本更精简
double frexp(double arg, int *exp)
{
if(...)
{
*exp = ...;
return result;
}
...
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2173 次 |
最近记录: |