将 const std::string& str = “” 作为函数的默认参数是否安全?

Is it safe to do const std::string& str = "" as default param for a function?

提问人:zeronull 提问时间:3/11/2023 最后编辑:dbushzeronull 更新时间:3/11/2023 访问量:78

问:

struct StrHolder {
    std::string str;

    StrHolder(const std::string& _str = "")
    {
        str = _str;
    }
};

简单的问题,这安全吗??

只是一个问题,检查上面的代码。

C++ 字符串 std

评论

4赞 Sam Varshavchik 3/11/2023
“安全”对你来说意味着什么?
1赞 Evg 3/11/2023
为什么你认为它可能不安全?
0赞 user16217248 3/11/2023
@SamVarshavchik 大概这意味着它可以调用未定义的行为。
0赞 zeronull 3/11/2023
@user16217248是正确的,我想知道这是否可以调用 UB...
1赞 Sam Varshavchik 3/11/2023
C++ 中的所有内容都可以扭曲为产生未定义的行为。保存指向此参数的指针,并在原始临时参数超出范围后使用它。

答:

1赞 Some programmer dude 3/11/2023 #1

如果您不确定,我建议改为重载:

StrHolder() = default;

StrHolder(const std::string& str)
    : str(str)
{
}

这样就没有歧义了。

0赞 Remy Lebeau 3/11/2023 #2

简单的问题,这安全吗??...我想知道这是否可以调用 UB

它是完全安全的,并且不会调用未定义的行为。