返回常量引用参数时出现问题

2024-06-09

我知道为什么以下不能正常工作,所以我不问为什么。但我感觉不好的是,在我看来,这是一个非常大的编程障碍。

#include <iostream>
#include <string>
using namespace std;

string ss("hello");

const string& fun(const string& s) {
        return s;
}

int main(){
        const string& s = fun("hello");
        cout<<s<<endl;
        cout<<fun("hello")<<endl;
}

第一个 cout 将不起作用。第二个cout将会。

我的担忧如下:

是否无法想象方法实现者想要返回一个常量引用且不可避免的参数的情况?
我认为这是完全可能的。
在这种情况下你会用 C++ 做什么?

Thanks.


在 C++ 中,建立对象的生命周期非常重要。一种常见的技术是为每个对象确定一个“所有者”。所有者负责确保该对象在需要时就存在,并在不需要时将其删除。

通常,所有者是另一个对象,它将所拥有的对象保存在实例变量中。处理此问题的其他典型方法是使其成为全局变量、类的静态成员、局部变量或使用引用计数指针。

在您的示例中,字符串对象没有明确的所有权。它不属于 main() 函数,因为它不是局部变量,并且没有其他所有者。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

返回常量引用参数时出现问题 的相关文章

  • 将反序列化方法转换为异步

    我正在尝试使用 Async Await 转换此将对象反序列化为字符串的方法 public static T DeserializeObject
  • 一种链接到类、方法,尤其是 C# 注释中的特定代码行的方法

    我想使用代码中指向目标的链接来构建某种文档 目标可以是Class or a Method或特定的代码行 指向特定的代码行是最重要的 我想到了VS2010的扩展或者特定的评论标签 有什么办法可以建立这种类型的链接吗 xml注释 沙堡可能就是你
  • 将 Google 云端硬盘访问权限委派给服务帐户失败

    我参与构建了一个内部使用的应用程序 用户可以通过该应用程序上传文件 并将其存储在 Google Drive 中 由于建议不要使用服务帐户作为文件所有者 因此我希望代表公司系统管理员有权访问的指定用户帐户上传应用程序 我已经创建了该应用程序以
  • 替换大字符串中的多个字符串的最快方法

    我正在寻找替换大 1mb 字符串的多个 500 子字符串的最快方法 无论我尝试过什么 String Replace 似乎都是最快的方法 我只关心最快的方式 不是代码的可读性 可维护性等 我不在乎是否需要使用不安全的代码或预处理原始字符串 每
  • boost::noncopyable 是如何工作的

    我在 C 实践中偶然发现了两个愚蠢的问题 据我所知 c 中的复制构造函数和赋值运算符不是继承的 那么 boost noncopyable 在这种情况下如何帮助禁止这些东西呢 class X private boost noncopyable
  • 我想要 Linux 上的 C 函数来收集核心转储而不终止进程

    abort 确实收集核心转储 但我不希望进程终止 dump core 收集核心转储 但在内核空间中 用户空间中是否有与 dump core 等效的函数 自己做的一个简单方法是fork进程 创建父进程的完整副本 并调用abort来自子进程 子
  • 如何正确使用memcpy?

    我有一个mainbuf bufsize 最初为空 我正在阅读一些输入 read fd otherbuf sizeof otherbuf 分配给不同的字符串otherbuf 每次我分配一个新字符串给otherbuf我想将其附加到mainbuf
  • 不同平面中不同幅值的两条线段之间最近的两个 3D 点

    比方说AB1 AB2 CD1 CD2 AB1 AB2 and CD1 CD23D 点构成线段 所说的线段是不在同一平面 AP是一个点 线段AB1 AB2 BP是一个点 线段CD1 CD2 Point1 and Point2彼此最接近 两条线
  • 带和不带指针声明符的 C++11 自动声明

    不同类型有什么区别bar1 and bar2 int foo 10 auto bar1 foo auto bar2 foo If both bar1 and bar2 are int 编写指针声明符是否有意义 在里面bar2宣言 这些声明完
  • CMake include_directories 和 add_subdirectories 之间的区别?

    我正在学习 CMake 来构建 C 代码 并努力解决以下概念 在我的根级目录中 我有一些 cpp 文件和 CMakeLists txt 它们在 gen cpp 目录中成功生成了一些 thrift 代码 我的根级别 CMakeLists tx
  • 为什么 VS 2008 在 Intellisense 中不显示 String 类的扩展方法

    由于 String 实现了IEnumerable
  • C++ 中的结构填充

    如果我有一个struct在 C 中 有没有办法安全地将其读 写到跨平台 编译器兼容的文件中 因为如果我理解正确的话 每个编译器都会根据目标平台进行不同的 填充 不 那是不可能的 这是因为C 在二进制层面缺乏标准化 Don Box http
  • “#include ”导致“错误:asm/io.h:没有这样的文件或目录”

    我正在使用 gentoo 并尝试编译一个程序来控制并行端口上的位 它的顶部附近有这一行 include
  • 开始学习 C# 的最佳方式是什么?

    我对 vb 6 有一点编程经验 而 vb net 则不多 请告诉我成为专家 C 程序员的最佳方法 我知道这需要很长时间 想想你如何学习人类语言 阅读 写作 口语和听力 阅读代码 阅读文章 阅读示例 当您更有经验时 请查看您使用的一些项目的源
  • 网页上的富文本编辑器

    我正在尝试在我的网页中添加一个富文本编辑器 用户可以在其中撰写评论并格式化他们所写的内容 类似于我们在此网站上撰写帖子的编辑器 谁能指出我关于此的正确方向 任何可以帮助我构建这样一个组件的教程 我还想要一个免费的产品 忘记之前提到 类似的东
  • 如何使用 SonarQube 的 C# 插件设置 FxCop 安装路径

    我正在尝试使用 SonarQube C 插件分析 NET C 项目 从C Plugin 3 0开始 即使sonar project properties中的 sonar fxcop mode skip FxCop也会自动执行 所以我将FxC
  • 当调试器退出且没有调用堆栈时,用于跟踪 C# 崩溃的工具?

    我有一个大型 复杂的 C GUI 应用程序 它以完全可重现的方式崩溃 但我无法轻松诊断崩溃的原因 因为调试会话不是以通常的方式使用调用堆栈破坏调试器 而是完全退出 唯一的提示是输出窗口末尾有一条消息 STATUS STACK BUFFER
  • 如何在控制台应用程序中创建事件循环/消息管道?

    我想创建一个注册了一些事件的控制台应用程序 问题是这些事件永远不会被触发 在这种特殊情况下Windows 窗体 http en wikipedia org wiki Windows Forms我应该调用的应用程序Application Ru
  • 如何在C++中动态调用函数

    除了 boost Bind Function 之外 我如何在 C 中动态调用函数 PHP has obj new MyObject function doSomething obj gt function Objective C 有 MyO
  • 用于 DSP 的快速 2D 卷积

    我想实现一些图像处理算法 这些算法旨在运行在小猎犬板 http en wikipedia org wiki Beagle Board 这些算法广泛使用卷积 我正在尝试为 2D 卷积找到一个好的 C 实现 可能使用快速傅里叶变换 我还希望该算

随机推荐