【问题标题】:Any way to shorten String type in C++?有什么方法可以缩短 C++ 中的字符串类型?
【发布时间】:2014-03-17 10:04:52
【问题描述】:

假设我有函数foo(string& s)。如果我得到C stringfoo(char* s),我会简单地将函数称为foo("bar")
我想知道我是否可以在C++ String 中以某种方式做到这一点?

以某种方式缩短这个:

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

我正在使用 Linux GCC C++。

【问题讨论】:

  • afaik 你可以做 foo("bar") 如果参数是一个字符串,转换将自动完成。
  • 你能粘贴你的代码和你得到的错误吗?
  • 参数必须是一个常量引用。
  • 因为你是通过引用传递的。
  • 请注意,为定义 void foo2(char*) 调用 foo2("bar") 是危险的,因为它允许您写入参数。

标签: c++ parameter-passing shortcut


【解决方案1】:

它不起作用,因为参数必须是 const 引用:

void foo( const std::string& s )
//        ^^^^^

foo( "bar" );  // will work now

【讨论】:

    【解决方案2】:
    • 如果您希望foo 仅从参数中读取,您应该编写foo(const string& s)
    • 如果您希望foo 将字符串保存在某处(类成员..),您应该写foo(string s)

    两个版本都允许您编写 foo("bar");,这对于非 const 引用没有任何意义。

    【讨论】:

      【解决方案3】:

      您也可以尝试foo(string("bar")); 来获得您想要的结果,但由于它需要参考,这也不起作用。

      这意味着你最好的办法是重载const char * 来调用字符串方法(这样你只维护一个方法)。

      【讨论】:

        【解决方案4】:

        std::string 类确实有从 const char* 的隐式转换,所以通常情况下,将字符串文字传递给采用 std::string 的函数就可以了。

        在您的情况下失败的原因是该函数将其参数作为非常量左值引用,因此它需要一个实际的 std::string 左值来操作。

        如果函数实际上想要采用非 const 左值引用(即它修改参数),则必须创建一个左值 std::string 并传递它(就像你做的那样)。

        如果函数没有修改参数,则改为通过常量引用 (const std::string&) 或按值 (std::string) 取值;对于这两种情况,传递一个右值(如从const char* 隐式转换创建的std::string)将起作用,因此您可以使用字符串文字调用该函数。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-02-06
          • 1970-01-01
          • 2011-04-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多