C++ 引号中定义的参数是什么

C++ 引号中定义的参数是什么,c++,string,cstring,C++,String,Cstring,在一些函数调用中,我看到这样的东西 function(variable1, "someValue"); 基于此,我有一些问题 1)C++如何处理第二个参数?< /P> 2) 如果某个函数接受cstring,那么为什么在执行以下操作时会出现错误 functionTakingCString(stringVariable.c_str() + "someValue"); 有没有办法代替声明const char变量?如果我在某些地方错了,请纠正我 常量字符* 二进制运算符+不能应用于常量字符*操作数

在一些函数调用中,我看到这样的东西

function(variable1, "someValue");
基于此,我有一些问题

1)C++如何处理第二个参数?< /P> 2) 如果某个函数接受cstring,那么为什么在执行以下操作时会出现错误

functionTakingCString(stringVariable.c_str() + "someValue");
有没有办法代替声明const char变量?如果我在某些地方错了,请纠正我

  • 常量字符*

  • 二进制运算符
    +
    不能应用于
    常量字符*
    操作数类型。如果一个是std::string,那么它会因为运算符重载而工作

  • 它们被称为字符串文字,如果您想要获取一个类似字符串文字的参数,通常会传递一个
    const std::string&
    或一个
    const char*
    ,具体取决于API的要求

    2) 如果某个函数接受cstring,那么为什么在执行以下操作时会出现错误


    这是因为“+”运算符没有为
    char*
    type重载。您可以将其连接到类型为
    string
    stringVariable
    ,该类型的
    +
    运算符已重载以连接两个字符串,然后获取
    c_str()
    以传递给接受
    char*
    const char*

    的函数。第二个参数是const char*。在某些情况下,如果您具有所需类型的特殊类型,并且该类型接受给定类型,则可以从一种类型转换为另一种类型。在某些情况下,编译器可以为您执行此操作

    在本例中,string有一个构造函数,该构造函数接受const char*,因此编译器可以在后台将const char*转换为字符串。如果要停止这种行为,请查看explicit关键字

    char*类型实际上不是一个类,因此它没有适用于字符串的+运算符。但是,

    (stringVariable + "someValue").c_str()
    

    将起作用,因为stringVariable是一个字符串,它的加号运算符可以将char*转换为字符串

    从技术上讲,字符串文字是
    常量字符(&)[N]
    ,而不是
    常量字符*
    。有时它确实会产生影响,比如如果
    函数
    通过引用获取文本。