为什么您必须声明/创建一个单独的变量来通过引用调用,而不仅仅是在函数调用中创建一个自动对象
Why do you have declare/create a separate variable to call by reference rather than just creating an automatic object in the function call?
给定:
void foo(std::string &s) {
...
}
为什么这会导致编译器错误:
foo(std::string("fail"));
因为这很好:
std::string s("winning");
foo(s);
故障情况的错误为error: no matching function for call to ‘foo(std::string)’
在获胜的情况下,我认为编译器无论如何都会优化s
。我在这里缺少什么概念?
Pass-by-非const
引用用于输出(和inout)参数。
当您传递一个临时的时,没有地方可以放置输出并由调用方检索。所以语言规则不允许这样。(除了一个例外——即使在非const
成员函数中,this
也可以绑定到临时的)
如果仅输入参数,则通过const
引用。如果参数将所有权转移到函数,则通过右值引用传递。这两家公司都接受临时合同。
如前所述,您的函数要求一个可修改的字符串,而您给出的是const(所有temp都是const)。将您的函数签名修改为:
void foo(const std::string &s) {
...
}
使用const引用参数,一切都将如您所期望的那样工作。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 试图在visual studio上用C++创建一个桌面应用程序
- 如何创建一个空的全局类并在启动时实例化它
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何创建一个QTableWidgetItem,用长文本右对齐,左边有省略号
- 我正在尝试使用 c++ 创建一个货币转换程序,我不知道如何继续
- visual是否可以在c++中创建一个接收无限数量相同类型(或至少相当数量)参数的函数
- C++-我可以创建另一个类的成员并在构造函数中使用它吗
- 试图创建一个多线程程序来查找0-100000000之间的总素数
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- 如何使用CLion在Mac上创建一个新的.txt文件
- 如何在没有数据拷贝的情况下从指针创建一个Eigen VectorXd对象
- 在c++中为double类型的数组创建一个unique_ptr
- 如何创建函数管道,以便函数一个接一个地运行?
- 如何从这些语句中的每一个创建不同的函数?
- 给定一个创建的带有货物的链表,我需要使用函数检查实际序列或"train"是否有效
- 一个创建彩票游戏的程序,该彩票游戏可以有效地创建 10 套而没有任何重复?
- 如何实现一个创建新对象并返回对它的引用的C++方法
- 如何成功创建一个创建对象并返回指向该对象的指针的函数