返回一个空的C-String

Evo*_*lor 3 c++ return c-strings cstring

简单问题:

如何使用尽可能少的代码返回空C-String?

我有需要返回空的代码char*.我正在寻找一些类似的东西return "";.我知道有几种方法可以做到这一点,但我正在寻找最有效的方法.

使用return "";给出warning: conversion from string literal to 'char *' is deprecated [-Wdeprecated-writable-strings]

谢谢!

Chr*_*sen 8

简答:

const char *get_string() { return ""; }
Run Code Online (Sandbox Code Playgroud)

要么

char *get_string() { return const_cast<char *>(""); }
Run Code Online (Sandbox Code Playgroud)

要么

char *get_string() { return NULL; }
Run Code Online (Sandbox Code Playgroud)

要么

std::string get_string() { return std::string(); }
Run Code Online (Sandbox Code Playgroud)


详细解答:

char *C和C++ 98/C++ 03支持从字符串文字隐式转换,但显然不在C++ 11中.弃用警告只是为了让您知道应该解决这个问题,特别是如果您希望能够迁移代码C++ 11.

空字符串文字("")实际上不是空的,它是一个包含单个空字符(\ 0)的字符串.当你使用时return "";,你实际上是返回一个指向const字符串文字的内存位置的指针,所以函数返回类型应该是const char *.

如果你真的必须返回一个非常量指针到字符串文字,你可以使用const_cast运算符来抛弃const.

更好的做法是为返回nullptr空,非const,C样式字符串的函数返回NULL(或),但前提是调用代码检查NULL指针.

请注意,C++有自己的字符串类型(std::string),更好的做法是尽可能使用它而不是C风格的字符串.