如果在以下情况下存储参数,是否复制参数?

传递的文字字符串:

std::string globalStr;
void store(const std::string &str)
{
    globalStr = str;
}
store("Literal");


传递的可变字符串:

std::string globalStr;
void store(const std::string &str)
{
    globalStr = str;
}
store(varStr);


以及如果globalStr存储参考

std::string &globalStr;
void store(const std::string &str)
{
    globalStr = str;
}
store("Literal"); //Should this cause any problem?
store(varStr);


C ++是否进行了优化以防止在上述任何情况下制作不必要的副本?

最佳答案

C ++是否进行了优化以防止在上述任何情况下制作不必要的副本?


没有。

标准框仅保证在第一种和第二种情况下,使用strglobalStr的值复制到std::string::operator=()

根据STL的实现,如果std::string使用写时复制优化,则可以避免深层复制。

第三种情况将无法编译,因为在初始化引用后无法对其进行重新分配。

08-27 01:17