通过引用传递的问题

Sim*_*ker 7 c++ overloading pass-by-reference pass-by-value

我可以重载一个带引号或变量名的函数吗?

例如,当我尝试这样做时:

void function(double a);
void function(double &a);
Run Code Online (Sandbox Code Playgroud)

我希望这个函数的调用者能够做到:

double a = 2.5;
function(a); // should call function(double &a)
function(2.3); // should call function(double a)
Run Code Online (Sandbox Code Playgroud)

我想编写pass-by-reference函数以便更好地使用内存并可能在范围之外操作变量,但是不必创建新变量就可以调用该函数.

这可能吗?

干杯

Rod*_*ddy 9

我想你在这里错过了重点.你应该拥有的只是这个:

void function(const double &a);
Run Code Online (Sandbox Code Playgroud)

注意"const".有了这个,你应该总是得到传递参考.如果你有非const通过引用传递,那么编译器将正确地假设你希望修改传递的对象 - 当然这在概念上与传值的变量不兼容.

使用const引用,编译器将很乐意为您创建临时对象.非const版本不适合您,因为编译器只能将这些临时文件创建为"const"对象.

  • 确实.C++中的约定通常是通过值传递内置类型(int,double,char,pointers等),以及通过引用传递复合类型(类和结构). (2认同)