在某些函数调用中,我看到这样的东西。
function(variable1, "someValue");
我有一些基于此的问题
1)c ++如何处理第二个参数?
2)如果某个函数采用cstring,那么当我们执行以下操作时,为什么会出现错误
functionTakingCString(stringVariable.c_str() + "someValue");
是否有某种方法而不是声明一个const char变量?如果我错在哪里,请纠正我。
答案 0 :(得分:3)
它们被称为字符串文字,如果你想获取一个像这样的字符串文字的参数,你通常会传递const std::string&
或const char*
,具体取决于什么您的API需要。
答案 1 :(得分:2)
2)如果某个函数采用cstring,那么当我们执行以下操作时,为什么会出现错误
这是因为'{'}运算符没有为char *
类型重载。您可以将其连接到类型为stringVariable
的{{1}} string
运算符已被重载以连接两个字符串,然后将+
传递给接受{的函数{ {1}}或c_str()
。
答案 2 :(得分:1)
const char *
二进制运算符+
无法应用于const char*
操作数类型。如果一个是std :: string,那么它会因为运算符重载而起作用。
答案 3 :(得分:0)
第二个参数是const char *。在某些情况下,如果您具有接收给定类型的所需类型的特殊converting constructor,则您可以从一种类型转换为另一种类型。在某些情况下,编译器可以为您执行此操作。
在这个示例中,字符串有一个构造函数,它接受一个const char *,因此编译器可以将const char *转换为一个字符串。如果要停止此类行为,请查看explicit关键字。
char *类型实际上不是一个类,所以它没有一个适用于字符串的+运算符。但是,
(stringVariable + "someValue").c_str()
将起作用,因为stringVariable是一个字符串,它的plus运算符可以将char *转换为字符串。