簡述
在維護上古代碼時,遇到這樣一個問題 ,函數外部需要獲取函數內部的一個值,但返回值已經被佔用了,所以只能增加一個參數,但增加參數後,之前使用過此函數的地方,都需要修改,所以還需要設置一個缺省值。
解決方案一
bool func(int &i = 10)
{
i = 5;
return true;
}
這種方案並不可行,函數中的默認值10
爲常量,而 i
並非常引用。
如果將 i
改爲常引用,則不能修改i
,所以外部也獲取不到函數內部的值了,所以此方法不可用
解決方案二
bool func(int *i = nullptr)
{
int defaultValue = 10;
//int &num = i ? *i : defaultValue; //可讀性低
//num = 5;
if(!i)
i = &defaultValue;
*i = 5;
return true;
}
利用指針修改外部值,在函數內部設置默認參數
解決方案三
bool func(int &i)
{
i = 5;
return true;
}
bool func()
{
int defaultValue = 10;
return func(defaultValue);
}
利用函數重載,在函數內部設置默認值。