C++默认参数不能是一个引用

引用做参数时不能传一个定值(如数字或者const等~~~)

 

somefunc(int& a = 4) -> default argument for ‘int& a’ has type ‘int’

Is there a solution for it that isn't playing with pointers?

My aim is to have a function that would take an int as a parameter by reference, but when no int is passed, a default int is given, but that default has to be by reference too - i don't know how to achieve it though.
You are asking for the impossible. Consider: no int is passed, so the default int value is used. The function modifies the value of the argument. Effectively, the default int value has changed! This is powerful, as it allows you to make the value of say, 0 become 1 (i.e., the int literal 0 becomes the int literal 1, meaning that 0 == 1 is true).

Perhaps you actually do not want to modify the argument, thus passing by value or const reference will do?
You can't take a reference of a constant, so if you did "somefunc(4)" with the above declaration (without the default) it would also fail. 

The reason to have a reference is that you will be able to modify the passed in variable. Since a constant can't be changed, it's kind of meaningless to pass in a constant as a reference, even if the compiler would allow it. 

We may be able to give you an option if you explain further what you actually are trying to achieve with this. 

One alternative is of course to declare two functions:
Code:
1
2
3
4
5
6
7
8
9
10
11
void somefunc(int &a)
{
    // this is called with one integer parameter.
   ...
}
 
void somefunc()
{
   // This is called when no parameter is given.
   ...
}
原文地址:https://www.cnblogs.com/vanishfan/p/3314924.html