poc*_*coa 10 c++ memory reference function object
这是从函数返回对象的正确方法吗?
Car getCar(string model, int year) {
Car c(model, year);
return c;
}
void displayCar(Car &car) {
cout << car.getModel() << ", " << car.getYear() << endl;
}
displayCar(getCar("Honda", 1999));
Run Code Online (Sandbox Code Playgroud)
我收到一个错误,"收取临时地址".我应该这样使用:
Car &getCar(string model, int year) {
Car c(model, year);
return c;
}
Run Code Online (Sandbox Code Playgroud)
Jam*_*lis 23
getCar返回一个Car值,这是正确的.
你不能将那个返回值(一个临时对象)传递给displayCar,因为displayCar需要一个Car&.您不能将临时绑定到非const引用.你应该displayCar改为采用const引用:
void displayCar(const Car& car) { }
Run Code Online (Sandbox Code Playgroud)
或者,您可以将临时存储在本地变量中:
Car c = getCar("Honda", 1999);
displayCar(c);
Run Code Online (Sandbox Code Playgroud)
但是,最好displayCar采用const引用,因为它不会修改对象.
不要返回对局部Car变量的引用.
小智 8
你的问题是:
void displayCar(Car &car) {
cout << car.getModel() << ", " << car.getYear() << endl;
}
Run Code Online (Sandbox Code Playgroud)
你应该使用const引用:
void displayCar( const Car & car ) {
cout << car.getModel() << ", " << car.getYear() << endl;
}
Run Code Online (Sandbox Code Playgroud)
这个功能:
Car getCar(string model, int year) {
Car c(model, year);
return c;
}
Run Code Online (Sandbox Code Playgroud)
就好了,但它所做的只是构造函数所做的,所以它是多余的.传递值而不是引用是对这种类型的函数做的正确的事情,但是,模型参数应该由const引用传递:
Car getCar( const string & model, int year) {
Run Code Online (Sandbox Code Playgroud)
通常,对于类类型(如字符串或Car),参数的默认选择应始终为const引用.