初始化类型为‘;的非常量引用无效;std::string&; 我试图通过C++中的字符串头文件使用函数 rtrd()/,而不使用算法。 我所做的是检查起始位置和结束位置,如果存在空间,只需使用isspace()将其删除,但当我编译时,现在出现以下错误:
从“const char*”类型的右值初始化类型为“std::string&{aka std::basic_string&}”的非常量引用无效 这是我的代码:初始化类型为‘;的非常量引用无效;std::string&; 我试图通过C++中的字符串头文件使用函数 rtrd()/,而不使用算法。 我所做的是检查起始位置和结束位置,如果存在空间,只需使用isspace()将其删除,但当我编译时,现在出现以下错误:,c++,std,pass-by-reference,lvalue,reference-binding,C++,Std,Pass By Reference,Lvalue,Reference Binding,从“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--) {
#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;
}
#包括
#包括
使用名称空间std;
字符串rtrim(字符串和s){
尺寸i;
对于(i=s.length()-1;i!=(size\u t)-1;i--){
如果(!(isspace(s[i])){
打破
}
}
返回s.substr(0,i+1);
}
int main(){
cout上述代码将在堆栈上创建std::string
的临时对象,并将其作为非常量引用传递给函数。这是危险的,因为函数可能修改对象(这没有意义)或者记住对对象的引用,并在对象已销毁后尝试将其修改到其范围之外
在函数中,实际上不需要非常量
引用,因此只要将参数更改为const std::string&s
,它就会工作。上面的代码会在堆栈上创建std::string
的临时对象,并将其作为非常量引用传递给函数。这是非常危险的修改对象(没有意义)或记住对对象的引用,并在对象已销毁后尝试将其修改到其范围之外
在函数中,实际上不需要非常量
引用,因此只要将参数更改为const std::string&s
,它就会工作