什么是"真实的"; 或"10;" C++中的语句是什么意思,如何使用它?

sha*_*oth 8 c++ compiler-construction

在C++中,可以编写以下任何语句:

10;
true;
someConstant; //if this is really an integer constant
Run Code Online (Sandbox Code Playgroud)

或类似的东西

int result = obtainResult();
result; // looks totally useless
Run Code Online (Sandbox Code Playgroud)

如果在某些配置中扩展为空字符串的宏稍后与result变量一起使用,则后者可用于抑制编译器警告"变量已初始化但未引用"(VC++中的C4189).像这样:

int result = obtainResult();
result;
assert( result > 0 ); // assert is often expanded into an empty string in Release versions of code
Run Code Online (Sandbox Code Playgroud)

这些陈述的含义是什么?除编译器警告抑制外,如何使用它们?

Mag*_*off 26

这种陈述是对其他语言部分如何运作的逻辑扩展.考虑使用一个返回值的函数,例如int foo(),它有一些副作用.有时你只想要那些副作用发生,所以你写foo();一个声明.

现在,虽然这看起来并不完全相同10;,但函数调用迟早会评估为int,并且没有任何事情发生在int中,就像使用10;.

同一问题的另一个例子是,既然你可以这样做a = b = 10;,那意味着b = 10必须进行评估10,因此你不能在不产生必须被抑制的值的情况下进行分配.

能够将这些值写为语句只是构建语言的一种逻辑方式,但对于您提出的情况,为它提供编译器警告甚至可能是个好主意.

除非你用它来压制编译器警告;)


Tim*_*mbo 7

这些语句(在C++语法中称为表达式语句)是有效的,因为它们是表达式.

表达式都是计算某种值的结构,例如

  • 3 + 5
  • someVariable
  • someFunctionCall(2)
  • someVar + = 62
  • val> 53

我认为,为了保持语法简单,他们决定不区分那些实际上有副作用的表达式(例如函数调用或赋值)和那些不具有副作用的表达式.