所以我正在開發一個代碼庫,在這個代碼庫中,這個 someFunc 在很多地方都被呼叫,我無法通過在所有呼叫這個函式的地方添加這個新變數來改變它。當呼叫 someFunc 的所有地方都不需要該變數時也是如此。
所以我有一個要求,我需要一個函式定義,其中包含一個通過參考傳遞的字串,并且我們能夠改變它的值。
- 按值傳遞:因為呼叫者使用了該字串變數
- 默認值:因為這個函式在很多地方被呼叫,不能到處改變。
- 非 const :因為我想改變它
這是我嘗試過的:
ExceptionClass ClassName::someFunc(int a, float b, map<int, string> c, const string &d = "")
這種方法的問題是我無法在我的函式中更改 d 的值。收到以下錯誤:

如何使用滿足我要求的東西?
uj5u.com熱心網友回復:
您可以通過使用單獨的多載而不是默認值來獲得您所描述的等效行為:
class ClassName {
public:
ExceptionClass someFunc(int a, float b, map<int, string> c, string &d);
ExceptionClass someFunc(int a, float b, map<int, string> c) {
string d = "";
return someFunc(a, b, c, d);
}
};
uj5u.com熱心網友回復:
將“”指定為默認引數是沒有意義的。如果您正在修改引數,那么這些更改似乎有一些價值,并且會因字串文字而丟失。
我可以想到兩種可能有意義的方法:
static string someFuncDefault = "";
ExceptionClass ClassName::someFunc(int a, float b, map<int, string> c, string &d = someFuncDefault);
或者
ExceptionClass ClassName::someFunc(int a, float b, map<int, string> c, optional<reference_wrapper<string>> d_opt = {});
第一種情況將有一個跨函式呼叫持續存在的默認引數。因此,一次呼叫的修改將更改下一次呼叫的默認用途。
第二個使字串是可選的,但在某種程度上,代碼可以檢查它是否被傳遞并相應地表現。如果沒有傳遞字串,則沒有必要修改字串。
但實際上,為什么你沒有 2 個功能?一個有 3 個引數,一個有 4 個引數?
uj5u.com熱心網友回復:
const如果你想改變字串,為什么要使用。試試這個版本:
ExceptionClass ClassName::someFunc(int a, float b, map<int, string> c, string &d)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/484065.html
上一篇:查找以用戶輸入的字母開頭的單詞
