使用参数“const [variable type]&”的目的是什么?如果它创建本地副本?

时间:2014-10-30 15:29:54

标签: c++

我读过像

这样的事情
void print_in_reverse (const std::string & str)
{
     std::string::const_iterator beg(str.cbegin()), it(str.cend());
     if (it != beg)
         while (--it != beg) std::cout << *it;
}

将创建传入的字符串的本地副本。那么上面有什么意义呢?它的计算效率不比外行人的版本高,

void print_in_reverse (std::string str)
{
     std::string::const_iterator beg(str.cbegin()), it(str.cend());
     if (it != beg)
         while (--it != beg) std::cout << *it;
}

1 个答案:

答案 0 :(得分:5)

如果那是你读的,那就错了。通过引用传递正是如何避免创建本地副本。

但是,在某些情况下,传递错误类型的参数会强制创建具有正确类型的临时值。例如:

print_in_reverse("abc");

从字符串文字中创建一个临时std::string,因为这是函数需要的类型。