由于const引用与传递值几乎相同,但没有创建副本(据我所知).那么是否需要创建变量的副本(因此我们需要使用pass by value).
我的功能有这个问题.
在main函数中我有这个result(param, param)函数,它有2个函数作为参数.
result(name(), score());
Run Code Online (Sandbox Code Playgroud)
但是,当代码执行时,score()函数首先执行而不是函数执行name().为什么会这样呢?
(还有一个问题是由score()函数首先执行而不是函数执行的name()是我得到了\n读取并且name()函数被完全跳过.但是我知道如何解决这个问题我只需要知道为什么不name()执行该函数首先.)
我在这里找到了这个:http://en.cppreference.com/w/cpp/language/eval_order.
任何C++运算符的操作数的评估顺序,包括函数调用表达式中函数参数的评估顺序,以及任何表达式中子表达式的评估顺序都是未指定的(除非另有说明).编译器将以任何顺序对它们进行评估,并且可以在再次评估相同表达式时选择另一个顺序.
在C++中没有从左到右或从右到左评估的概念,不要将操作符的从左到右和从右到左的关联性混淆:表达式
f1() + f2() + f3()被解析为(f1() + f2()) + f3()左边的运算符+的右对称关系,但是对f3的函数调用可以在运行时的第一个,最后一个或之间f1()或之间进行评估f2().**
但我的程序总是score()首先执行该功能.在它上面说它是随机的所以我至少应该name()首先执行函数有时是正确的吗?
完整代码可供参考.
#include <iostream>
#include <string>
using namespace std;
string name()
{
string fname;
cout << "Please type your full name: ";
getline(cin, fname);
return fname;
}
int score()
{
int points; …Run Code Online (Sandbox Code Playgroud)