类型为‘std::string& 的 non-const 引用的无效初始化
invalid initialization of non-const reference of type ‘std::string&
我正在尝试 trim 通过在 c++ 中使用来自字符串 header 的函数 rtrim()
来 trim 字符串,而不使用算法。
我所做的是检查开始和结束位置是否存在 space,只需使用 isspace()
将其删除但是当我编译时,现在出现此错误:
invalid initialization of non-const reference of type ‘std::string& {aka std::basic_string&}’ from an rvalue of type ‘const char*’
这是我的代码:
#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 world\t ") << "|" << endl;
}
每当我设置 string s = ( "hello world\t ");
和 运行 cout << rtrim(s) << endl;
等参数时,它似乎可以正常工作,但它不能像上面的代码那样工作。有什么建议吗?
以上代码将在堆栈上创建 std::string
的临时对象,并将其作为 non-const 引用传递给函数。这很危险,因为该函数可以修改对象(这没有意义)或记住对该对象的引用,并在对象已经被销毁后尝试将其修改到其范围之外。
在您的函数中,您实际上不需要 non-const
引用,因此只需将参数更改为 const std::string &s
即可。
我正在尝试 trim 通过在 c++ 中使用来自字符串 header 的函数 rtrim()
来 trim 字符串,而不使用算法。
我所做的是检查开始和结束位置是否存在 space,只需使用 isspace()
将其删除但是当我编译时,现在出现此错误:
invalid initialization of non-const reference of type ‘std::string& {aka std::basic_string&}’ from an rvalue of type ‘const char*’
这是我的代码:
#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 world\t ") << "|" << endl;
}
每当我设置 string s = ( "hello world\t ");
和 运行 cout << rtrim(s) << endl;
等参数时,它似乎可以正常工作,但它不能像上面的代码那样工作。有什么建议吗?
以上代码将在堆栈上创建 std::string
的临时对象,并将其作为 non-const 引用传递给函数。这很危险,因为该函数可以修改对象(这没有意义)或记住对该对象的引用,并在对象已经被销毁后尝试将其修改到其范围之外。
在您的函数中,您实际上不需要 non-const
引用,因此只需将参数更改为 const std::string &s
即可。