void doStuff( std::string const & s1, std::string const & s2="");
我想知道此代码在C ++中对于s2字符串是否合法。我想要一个默认参数,但要传递一个引用,并默认使用一个空字符串。将创建一个临时文件,并且引用将指向该临时文件,还是非法的C ++?]
是的,这是合法的。 const
将确保临时功能持续到功能doStuff
完成。
§12.2.5
与函数调用(5.2.2)中的参考参数的临时绑定将一直持续到包含该调用的完整表达式完成。
会更好
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);
为了理解语义,最好拆分原始statemenet。