gpt4 book ai didi

c++ - 这两个局部变量有什么区别?

转载 作者:太空狗 更新时间:2023-10-29 23:47:35 32 4
gpt4 key购买 nike

const std::string  s1("foo");
const std::string& s2("foo");

不确定它们有何不同,但我看到了两种用法的证据。有什么想法吗?

最佳答案

const std::string s1("foo");

这将命名的 std::string 对象声明为局部变量。

const std::string& s1("foo");

这声明了对 std::string 对象的 const 引用。创建了一个未命名的临时 std::string 对象,其内容为 "foo" 并将引用绑定(bind)到该临时对象。临时对象将一直存在,直到引用超出范围。

在这种特殊情况下,两者之间没有明显的区别:在这两种情况下,您最终都会得到一个可以通过名称 s1 访问的 std::string > 并且当 s1 超出范围时将被销毁。

但是,在某些情况下,是有区别的。例如,考虑一个通过引用返回的函数:

const std::string& get_reference_to_string();

如果用调用这个函数的结果初始化s1,则有以下区别:

const std::string s1(get_reference_to_string());
const std::string& s1(get_reference_to_string());

在第一种情况下,生成引用字符串的拷贝并用于初始化s1。在第二种情况下,s1 简单地绑定(bind)到返回的引用引用的 std::string:没有复制。

关于c++ - 这两个局部变量有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4901005/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com