如果在以下情况下存储参数,是否复制参数?
传递的文字字符串:
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 ++是否进行了优化以防止在上述任何情况下制作不必要的副本?
没有。
标准框仅保证在第一种和第二种情况下,使用str
将globalStr
的值复制到std::string::operator=()
。
根据STL的实现,如果std::string
使用写时复制优化,则可以避免深层复制。
第三种情况将无法编译,因为在初始化引用后无法对其进行重新分配。