类型为'std::string&的非常量引用的初始化无效
invalid initialization of non-const reference of type ‘std::string&
我正在尝试在不使用算法的情况下使用来自 c++ 字符串标头的函数rtrim()
来修剪字符串。
我所做的是检查开始和结束位置是否存在空间,只需使用 isspace()
将其删除,但是当我编译时,现在我收到此错误:
从类型为"const char*"的右值初始化为"std::string&{aka std::basic_string&}"的非常量引用无效
这是我的代码:
#include <iostream>
#include <string>
using namespace std;
string rtrim(string& s) {
size_t i;
for(i = s.length() - 1; i != (size_t)-1; i--) {
if(!(isspace(s[i]))){
break;
}
}
return s.substr(0, i + 1);
}
int main(){
cout << "|" << rtrim(" hello worldt ") << "|" << endl;
}
每当我设置参数(例如string s = ( "hello worldt ");
并运行)时,cout << rtrim(s) << endl;
似乎都可以工作,但它不能像上面的代码那样工作。 有什么建议吗?
上面的代码将在堆栈上创建临时std::string
对象,并将其作为非常量引用传递给函数。这是危险的,因为该函数可能会修改对象(这没有意义)或记住对对象的引用,并在对象已被销毁后尝试将其修改出其范围。
在您的函数中,您实际上不需要non-const
引用,因此只需将参数更改为 const std::string &s
即可。
相关文章:
- 什么时候在C++中返回常量引用是个好主意
- 通过常量引用传递参数的矩阵模板类
- 在C++中使用非常量引用作为常量
- 具有常量引用参数的函数模板专用化
- 多个"常量引用"变量可以共享同一个内存吗?
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- 为什么常量方法可以采用非常量引用?
- 为什么当我们有常量引用时创建临时对象?
- 如何返回向量的常量引用?
- C++:常量引用参数
- 不同于按值传递和常量引用传递的程序集
- 为什么const_cast和static_cast常量引用没有效果?
- C++ 获取函数在常量引用中按值返回的结果
- 从 BubbleSort* 类型的右值初始化 'AssortedSorter&' 类型的非常量引用无效"
- C++ 在类中使用常量引用文本时 O2 内存泄漏
- 是否可以跨 dll 边界返回常量引用/指向 std::vectors?
- C++中大多数/所有 setter 函数的参数是否应该写为常量引用?
- 通过非常量引用参数修改常量引用参数
- 将常量引用传递给线程
- 为什么C++中没有常量引用,就像常量指针一样?