为什么在同一行上有 2 个函数调用时跳过函数调用
Why does the function call get skipped when there are 2 function calls on the same line?
我很困惑为什么这条线:
cout << "Your average in this course is " << average() << " and your letter grade is " << convert_to_letterGrade() << "n";
不起作用,而以下工作(一个 cout 分为 2 个):
cout << "Your average in this course is " << average();
cout << << " and your letter grade is " << convert_to_letterGrade() << "n";
此代码位于 void 函数中,该函数是类 Grades
的公共成员。 average()
计算结果并将其存储在私有成员变量 averageScore
中,并返回 averageScore
。 convert_to_letterGrade()
根据 averageScore
的值返回一个char
值,如果平均分数不合理,则返回错误消息,并且这两个函数都是类的私有成员。
在第一种情况下,我首先收到来自convert_to_letterGrade()
的错误消息,然后是cout
语句应该打印的内容。cout
语句打印了正确的averageScore
值,但是当我进入convert_to_letterGrade()
时,该函数仍在使用垃圾值进行averageScore
,而第二个工作正常,convert_to_letterGrade()
也使用正确的averageScore
值。
这是为什么呢?
您应该知道,表达式中的函数可以按任何顺序调用。
我假设您对convert_to_letterGrade的实现取决于首先调用 average(),这在您的第一个语句中无法保证。
编写一个只有在之前调用过另一个函数时才给出正确结果的函数是一种危险的做法。如果我只想将成绩打印为信件会怎样?我必须记得先打电话给平均()吗?这是一种可怕的做法。或者,如果您想先打印字母分数,然后打印平均值怎么办?
convert_to_letterGrade()
根据 averageScore 的值返回一个字符值,如果平均分数不合理,则返回错误消息
根据您对行为的描述,这实际上不是真的。
如果分数合理,则当前函数返回char
值,如果不合理,则直接向cout
打印错误消息。
修复它就像按照您所说的操作一样简单,将错误字符串设置为返回值,以便调用方控制何时打印它。
除此之外,您还存在convert_to_letterGrade()
依赖其他函数设置的变量的问题。 正如 gnasher729 在他的回答中提到的那样,除非您在两者之间放置一个序列点,否则无法保证average()
在convert_to_letterGrade()
之前被调用。
- 函数调用中参数的顺序重要吗
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 变量没有改变?通过向量的函数调用
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 我知道函数调用中存在歧义.有没有办法调用foo()函数
- 模板函数调用
- 获取从C++中同一类中的构造函数调用的方法返回的值
- 析构函数调用
- 成员函数调用和C++对象模型
- 使用共享指针的函数调用,其对象应为 const
- C++:编译时检查匹配的函数调用对?
- 函数调用C++中的参数太少
- 来自 DLL 的函数调用 [表观调用的括号前面的表达式必须具有(指向-)函数类型]
- 返回指向对象的指针的函数调用是否为 prvalue?
- C++ 如何重载 [] 运算符并进行函数调用
- uncrustify:如何将多行 C 函数调用的参数组合到一行上?
- 为什么在同一行上有 2 个函数调用时跳过函数调用
- 如何在函数调用的一行代码中实例化类
- 一行中函数调用的执行顺序-未定义