简单的问题:
如何用尽可能少的代码返回一个空的 C 字符串?
我有需要返回空的代码char*
。我正在寻找类似的东西return "";
。我知道有几种方法可以做到这一点,但我正在寻找最有效的方法。
使用return "";
给warning: conversion from string literal to 'char *' is deprecated [-Wdeprecated-writable-strings]
谢谢!
简短的回答:
const char *get_string() { return ""; }
或者
char *get_string() { return const_cast<char *>(""); }
或者
char *get_string() { return NULL; }
或者
std::string get_string() { return std::string(); }
详细答案:
char *
C 和 C++98/C++03 支持从字符串文字到的隐式转换,但显然在 C++11 中不支持。弃用警告只是为了让您知道应该解决这个问题,特别是如果您希望能够迁移代码 C++11。
空字符串文字 ("") 实际上不是空的,它是一个包含单个空字符 (\0) 的字符串。当您使用时return "";
,您实际上是在返回一个指向 const 字符串字面量的内存位置的指针,因此函数返回类型应该是const char *
。
如果你真的必须返回一个指向字符串文字的非常量指针,你可以使用const_cast
操作符来抛弃const
.
更好的做法是为nullptr
返回空、非常量、C 样式字符串的函数返回 NULL(或 ),但前提是调用代码正在检查 NULL 指针。
请注意,C++ 有自己的字符串类型 ( std::string
),更好的做法是尽可能使用它而不是 C 样式的字符串。
char* foo()
{
static char empty[1];
return empty;
}
请注意,此功能绝对是愚蠢的,无论您的实际问题是什么,这都不是正确的解决方案。但是,既然你拒绝解释你的实际问题,那就去吧。