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]
,而不是常量字符*
。有时它确实会产生影响,比如如果函数
通过引用获取文本。