2014-10-30 44 views
-1

我读了做这样的事情如果创建本地副本,使用参数“const [variable_type]&”的目的是什么?

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; 
} 

回答

5

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

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

print_in_reverse("abc"); 

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

+0

我知道通过引用是避免本地副本的方式,但我记得在C++入门读物中传递一个const引用将会创建一个本地副本 – 2014-10-30 15:37:22

+0

您是否有确切的引用? – Borgleader 2014-10-30 15:41:42

+1

@DonaldKnuthLied:据推测,它说传递一个不同的类型会导致创建一个临时(在调用函数中 - 不是被调用函数的本地),正如我所描述的那样。 – 2014-10-30 15:42:17