看看这段代码,有人可以解释一下为什么a+1;分配给我b?
#include <iostream>
int main(int argc, char *argv[])
{
int a = 5;
int b = ({
std::cout << "inside scope" << std::endl;
a+1;
});
std::cout << "b value: " << b;
}
Run Code Online (Sandbox Code Playgroud)
构造
int b = ({
std::cout << "inside scope" << std::endl;
a+1;
});
Run Code Online (Sandbox Code Playgroud)
...不是标准的C++,而是g ++编译器提供的语言扩展.
它被称为"语句表达式",基本上允许您为计算引入局部变量.
既然你没有使用它,你可以使用标准的C++ "逗号表达式",如下所示:
int b = (
std::cout << "not inside scope" << std::endl,
a+1
);
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,序列中的表达式按顺序计算,表达式的值作为整体是最后一次评估的值.
在绝对需要为初始化程序中的计算引入变量或循环时,可以使用标准C++ lambda来实现:
int b = [&](){
double bah = 3.14;
std::cout << "inside scope" << std::endl;
return a+!!bah;
}();
Run Code Online (Sandbox Code Playgroud)
在C++ 17及更高版本中,您可以使用std::invoke这些代码更清晰,最后不需要JavaScript ()调用,而是预先使用单词invoke.
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |