我读过像
这样的事情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;
}
答案 0 :(得分:5)
如果那是你读的,那就错了。通过引用传递正是如何避免创建本地副本。
但是,在某些情况下,传递错误类型的参数会强制创建具有正确类型的临时值。例如:
print_in_reverse("abc");
从字符串文字中创建一个临时std::string
,因为这是函数需要的类型。