将const std::string& str = ""作为构造函数默认参数是否安全?
这种写法完全安全
这里的""是C风格字符串字面量,会被隐式转换成临时的std::string对象。C++标准允许const左值引用绑定到临时对象,并且该临时对象的生命周期会被延长到引用的作用域结束——也就是整个构造函数调用的全过程。
在你的构造函数中,只是将这个临时std::string的值赋值给成员变量str,整个过程不存在未定义行为,完全符合C++标准,可以放心使用。
顺带提个优化建议:可以把构造函数改成成员初始化列表的形式,效率会更高:
struct StrHolder { std::string str; StrHolder(const std::string& _str = "") : str(_str) {} };
内容的提问来源于stack exchange,提问作者zeronull
相关产品推荐
相关产品推荐

