chr*_*irk 2 c++ variables const reference local
const std::string s1("foo");
const std::string& s2("foo");
Run Code Online (Sandbox Code Playgroud)
不确定它们是如何不同但我看到两种用法的证据.有任何想法吗?
const std::string s1("foo");
Run Code Online (Sandbox Code Playgroud)
这将命名std::string对象声明为局部变量.
const std::string& s1("foo");
Run Code Online (Sandbox Code Playgroud)
这声明了std::string对象的const引用.std::string使用内容创建一个未命名的临时对象"foo",并将引用绑定到该临时对象.临时对象将存在,直到引用超出范围.
在这种特殊情况下,两者之间没有可观察到的差异:在这两种情况下,你最终会得到一个std::string可以通过名称访问的东西s1,并且当它s1超出范围时会被销毁.
但是,在某些情况下,存在差异.例如,考虑一个通过引用返回的函数:
const std::string& get_reference_to_string();
Run Code Online (Sandbox Code Playgroud)
如果s1使用调用此函数的结果进行初始化,则存在以下区别:
const std::string s1(get_reference_to_string());
const std::string& s1(get_reference_to_string());
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,引用字符串的副本并用于初始化s1.在第二种情况下,s1简单地绑定到std::string返回的引用所引用的内容:不进行复制.