簡體   English   中英

將std :: map傳遞為默認參數

[英]Passing std::map as a default argument parameter

我有這樣的功能:

int insert(std::string, std::string, std::map<std::string, std::string>&)

由於第三個參數是引用,因此為該參數提供默認參數的正確方法是什么?

我想要的是在默認情況下設置std::map<std::string, std::string>& = VAL ,並且僅在該VAL不是默認值時才使用地圖。

Rvalue不會綁定到非常量臨時變量。

但是,如果默認有意義,那么您可能無需修改它,在這種情況下,使其變為const,而不是std::map<std::string, std::string>()可以作為默認值正常工作。 即:

int insert(std::string x, std::string y,
           const std::map<std::string, std::string> &m =
                   std::map<std::string, std::string>())

如果確實需要非常量引用,則只需創建一個帶有將傳遞局部變量的參數的重載即可。

廣告評論:好的。 可以將全局變量作為默認參數傳遞。 只是

int insert(std::string x, std::string y,
           std::map<std::string, std::string> &m = GLOBAL_map);

我應該警告您,修改其參數(尤其是非第一個參數)的函數的設計相當糟糕,而全局變量則更是如此。

如果要傳遞非常量引用,那是因為您要對其進行修改,並將其傳遞給左值。 從您的文字中,我認為您想修改地圖,但只是有條件的。 在這種情況下,標准習慣用法是傳遞一個指針,將nullptr (對於C ++ 11之前的版本為NULL0 )作為默認參數,而您無需執行任何操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM