我们说我有功能foo(string& s)
。如果我得到C string
,foo(char* s)
,我只需将该函数称为foo("bar")
。
我想知道我是否可以在C++ String
中以某种方式做到这一点?
以某种方式缩短这一点:
string v("bar");
foo(v)
我正在使用Linux GCC C ++。
答案 0 :(得分:4)
它不起作用,因为参数必须是const
引用:
void foo( const std::string& s )
// ^^^^^
foo( "bar" ); // will work now
答案 1 :(得分:1)
foo
只读取参数,则应编写foo(const string& s)
。 foo
将字符串保存在某处(类成员..),您应该写foo(string s)
。 这两个版本都允许您编写foo("bar");
,这对于非const引用没有任何意义。
答案 2 :(得分:1)
您也可以尝试使用foo(string("bar"));
来获得所需的结果,但由于它需要参考,因此也无法使用。
这意味着你最好的选择是const char *
重载调用字符串方法(这样你只保留一种方法)。
答案 3 :(得分:0)
std::string
类确实有来自const char*
的隐式转换,所以通常情况下,将字符串文字传递给函数std::string
就可以了。
为什么它在你的情况下失败的是函数将其参数作为非const左值引用,因此它需要一个实际的std::string
左值来操作。
如果函数实际上想要取一个非const左值引用(即它修改了参数),你必须创建一个左值std::string
并传递它(就像你一样)。
如果函数没有修改参数,则将其更改为const-reference(const std::string&
)或值(std::string
);对于这两个方面,传递rvalue(如std::string
隐式转换创建的const char*
)将起作用,因此您可以使用字符串文字调用该函数。