什么是引号中定义的参数

时间:2012-09-20 16:43:42

标签: c++ string cstring

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

function(variable1, "someValue");

我有一些基于此的问题

1)c ++如何处理第二个参数?

2)如果某个函数采用cstring,那么当我们执行以下操作时,为什么会出现错误

functionTakingCString(stringVariable.c_str() + "someValue");

是否有某种方法而不是声明一个const char变量?如果我错在哪里,请纠正我。

4 个答案:

答案 0 :(得分:3)

它们被称为字符串文字,如果你想获取一个像这样的字符串文字的参数,你通常会传递const std::string&const char*,具体取决于什么您的API需要。

答案 1 :(得分:2)

  

2)如果某个函数采用cstring,那么当我们执行以下操作时,为什么会出现错误

这是因为'{'}运算符没有为char *类型重载。您可以将其连接到类型为stringVariable的{​​{1}} string运算符已被重载以连接两个字符串,然后将+传递给接受{的函数{ {1}}或c_str()

答案 2 :(得分:1)

  1. const char *

  2. 二进制运算符+无法应用于const char*操作数类型。如果一个是std :: string,那么它会因为运算符重载而起作用。

答案 3 :(得分:0)

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

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

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

(stringVariable + "someValue").c_str()

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