3

簡単な質問:

できるだけ少ないコードで空の C-String を返すにはどうすればよいですか?

空の を返す必要があるコードがありますchar*。に沿ったものを探していreturn "";ます。これを行うにはいくつかの方法があることは知っていますが、可能な限り最も効率的な方法を探しています。

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

ありがとう!

4

2 に答える 2

10

簡潔な答え:

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 を移行できるようにしたい場合に、これに対処する必要があることを知らせるためにあります。

空の文字列リテラル ("") は実際には空ではなく、1 つの null 文字 (\0) を含む文字列です。を使用するreturn "";と、実際には const 文字列リテラルのメモリ位置へのポインターが返されるため、関数の戻り値の型はconst char *.

非 const ポインターを文字列リテラルに返す必要がある場合は、const_cast演算子を使用してconst.

nullptr呼び出し元のコードが NULL ポインターをチェックしている場合に限り、空で非 const の C スタイルの文字列を返す関数に対してNULL (または ) を返すことをお勧めします。

C++ には独自の文字列型 ( std::string) があることに注意してください。可能であれば、C スタイルの文字列ではなく、これを使用することをお勧めします。

于 2013-10-19T04:20:39.880 に答える