我可以将默认值传递给std :: string的引用吗?

问题描述 投票:8回答:3
void doStuff( std::string const & s1, std::string const & s2="");

我想知道此代码在C ++中对于s2字符串是否合法。我想要一个默认参数,但要传递一个引用,并默认使用一个空字符串。将创建一个临时文件,并且引用将指向该临时文件,还是非法的C ++?]

c++ reference const default-arguments
3个回答
13
投票

是的,这是合法的。 const将确保临时功能持续到功能doStuff完成。

§12.2.5

与函数调用(5.2.2)中的参考参数的临时绑定将一直持续到包含该调用的完整表达式完成。


3
投票

会更好

void doStuff( std::string const & s1, std::string const & s2 = std::string());

为了避免额外的临时const char *。 (您的变体有2个临时变量:const char *和空的std::string。)>

或者,使用用户定义的文字(C ++ 14):

void doStuff( std::string const & s1, std::string const & s2 = ""s);

2
投票

为了理解语义,最好拆分原始statemenet。

© www.soinside.com 2019 - 2024. All rights reserved.