【问题标题】:How is printf() an expression?printf() 如何是一个表达式?
【发布时间】:2022-01-27 11:14:14
【问题描述】:

由于出现错误并盯着this video by Copper Spice 看,我试图学习价值类别。

他们继续定义一个表达式,并作为示例提供printf() at this point in the video(下面的屏幕截图)。

printf() 是怎样一个表达式?我一直认为函数调用在自己编写时并不是真正的表达式。它们更像是我的初学者头脑所想的陈述。此外,他们提供的定义中提到了 operatorsoperands,但在 printf 中却没有。我错过了什么?

提到的数据类型是printf 的返回值。返回 void 的函数呢?

【问题讨论】:

  • int x = 2 + 3; 包含表达式 2 + 3,其计算结果为 5int x = 2 + printf("hello"); 包含表达式2 + printf("hello"),其计算结果为7(又名2 加上printf("hello") 返回的值,在这种情况下几乎可以肯定是5
  • "当他们自己写的时候":混淆可能是,例如printf();是一个statement,更具体的说是一个expression statement,意思是一个由一个expression组成的语句,即printf() .

标签: c++ c++11 c++14 rvalue lvalue


【解决方案1】:

printf() 是怎样一个表达式?

这是一个函数调用表达式。

我一直认为函数调用并不是真正的表达式

函数调用是表达式。

它们更像是陈述

函数调用不是语句。例如考虑ret = printf();。这里,函数调用是赋值表达式的子表达式。语句不能是子表达式 - 表达式可以是子表达式。

此外,他们提供的定义中提到了运算符和操作数,但 printf 中都没有。

括号是函数调用运算符。操作数是括号左侧的函数(它是一个后缀表达式)和括号内的参数列表。

数据类型如何表征表达式?

每个表达式都有一个类型。类型以及值类别会影响您如何使用表达式。

我以为数据类型和printf函数的返回类型有关

你想的没错。函数调用表达式的类型由函数的返回类型决定。 printf() 的类型是int

【讨论】:

  • 另外值得一提的是&运算符可以应用于函数。
  • 加1。您能否补充一下以回答哪些陈述需要澄清?
  • 你的意思是操作数是文本printf和一个空的参数列表?
  • @heretoinfinity 表达式printf,和空参数列表是操作数,是的。
  • @heretoinfinity “以”为特征并不意味着“以”为特征。这两点是每个表达式都具有的属性,但表达式是(模糊地)在上面的项目符号中定义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-09
  • 1970-01-01
  • 2011-01-18
  • 2010-10-04
  • 1970-01-01
相关资源
最近更新 更多