在C++中将范围分配给变量

Ngu*_*inh 4 c++ gcc

看看这段代码,有人可以解释一下为什么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)

Che*_*Alf 7

构造

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.