何时使用const char *

时间:2010-04-30 14:21:24

标签: c++

如果我有一个函数api,它需要14位输入并返回6位数输出。我基本上将输入定义为const char *。这是正确和安全的事吗? 另外为什么我不想只做char *我可以,但在这种情况下使用const char *似乎更谨慎,特别是因为它是我提供的api。因此,对于不同的输入值,我生成6位数代码。

7 个答案:

答案 0 :(得分:10)

我不确定你为什么使用char指针,你可以使用std::string

std::string code(const std::string& input)
{ ... }

如果您没有选择,使用const char*可以保证用户不会更改他的数据,特别是如果它是一个字符串文字,其中修改一个是未定义的行为。

答案 1 :(得分:4)

当您说const char *c时,您告诉编译器您不会对c指向的数据进行任何更改。因此,如果您不直接修改输入数据,这是一个很好的做法。

答案 2 :(得分:4)

通过使用const,您承诺您的用户不会更改传入的字符串。它将成为帮助定义函数行为的API的一部分。它还让用户传递常量字符串,包括像“mystring”这样的文字字符串。

答案 3 :(得分:2)

使用const可获得多项好处:

  1. 它记录了您的代码,用户知道不会对此字符串造成任何伤害。
  2. 您允许用户发送他可能拥有的const char*。从非const转换为const是自动的。反过来是应该避免的事情(明确地做,并且有时可能导致不确定的行为)
  3. 您让编译器检查您。编译器现在可以验证您是否不小心更改了用户的字符串。

答案 4 :(得分:2)

字符串文字具有静态存储类(它们在程序的持续时间内存在),如果从程序中的多个位置引用相同的字符串文字,则可以共享也可以不共享。修改字符串文字的效果是不确定的;因此,您应该始终将指向字符串文字的指针声明为const char *。

答案 5 :(得分:0)

您需要在传递字符串文字的任何地方使用const char *,否则编译器会拒绝(假设您不想将其转换为std::string)。

答案 6 :(得分:0)

const char*通常用于参数,声明您的函数不会修改该字符串。

void function(char* modified_str, const char* not_modified_str) { ... }

如果你要归还const char*你想说的话并不明显。你试图告诉没有人应该修改返回的字符串,但你仍然(我认为就是这样)将所有权转移到调用例程,因此它必须在你的函数的char上调用delete[]返回。

一般来说,使用std::string,然后您的函数将采用以下方式:

std::string function(std::string& modified_str, const std::string& not_modified_str) { ... }