有什么办法缩短C ++中的String类型?

时间:2014-03-17 10:04:52

标签: c++ parameter-passing shortcut

我们说我有功能foo(string& s)。如果我得到C stringfoo(char* s),我只需将该函数称为foo("bar")
我想知道我是否可以在C++ String中以某种方式做到这一点?

以某种方式缩短这一点:

string v("bar");
foo(v)

我正在使用Linux GCC C ++。

4 个答案:

答案 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*)将起作用,因此您可以使用字符串文字调用该函数。