2

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

function(variable1, "someValue");

我有一些基于此的问题

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

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

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

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

4

4 回答 4

3

它们被称为字符串字面量,如果你想接受一个字符串字面量的参数,你通常会传递 aconst std::string&或 a const char*,这取决于你的 API 需要什么。

于 2012-09-20T16:45:40.883 回答
2

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

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

于 2012-09-20T16:49:19.913 回答
1
  1. 常量字符*

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

于 2012-09-20T16:45:35.977 回答
0

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

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

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

(stringVariable + "someValue").c_str()

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

于 2012-09-20T16:49:50.910 回答