引号中定义的参数是啥
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* 强制转换为字符串。
【讨论】:
以上是关于引号中定义的参数是啥的主要内容,如果未能解决你的问题,请参考以下文章
C语言宏定义字符串参数要把参数转化成字符串再加引号才是参数么? #define PRINT(FOR