引号中定义的参数是啥

Posted

技术标签:

【中文标题】引号中定义的参数是啥【英文标题】:what are arguments defined in quotes引号中定义的参数是什么 【发布时间】:2012-09-20 16:43:42 【问题描述】:

在某些函数调用中,我看到类似这样的内容。

function(variable1, "someValue");

我有一些基于此的问题

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

2) 如果某个函数需要一个 cstring,那么为什么我们在执行以下操作时会出错

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

有什么方法可以代替声明一个 const char 变量吗?如果我在某些地方错了,请纠正我。

【问题讨论】:

从技术上讲,字符串文字是const char (&)[N],而不是const char *。有时确实会有所不同,例如 function 通过引用获取文字。 【参考方案1】:

它们被称为字符串字面量,如果您想采用类似字符串字面量的参数,您通常会传递const std::string&const char*,具体取决于您的API 要求。

【讨论】:

【参考方案2】:

2) 如果某个函数需要一个 cstring,那么为什么我们在执行以下操作时会出错

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

【讨论】:

【参考方案3】:

    const char*

    二元运算符 + 不能应用于 const char* 操作数类型。如果一个是 std::string,那么由于运算符重载,它可以工作。

【讨论】:

【参考方案4】:

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

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

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

(stringVariable + "someValue").c_str()

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

【讨论】:

以上是关于引号中定义的参数是啥的主要内容,如果未能解决你的问题,请参考以下文章

测试批处理文件中参数是不是为空的正确方法是啥?

不可训练参数的定义是啥?

zabbix 用户自定义监控参数添加

C语言宏定义字符串参数要把参数转化成字符串再加引号才是参数么? #define PRINT(FOR

scikit learn kmeans clustering中参数'verbose'的定义是啥

6.函数的定义方式,函数的参数问题