おそらく、C ++で参照によってリテラルを返すことは、リテラルがスコープ外になり、関数を離れるため、悪いことです。
const char &ToBoolean(bool val) const
{
return val ? (const char &)"1" : (const char &)"0";
}
、しかし、使用するときinline
は、リテラルのスコープが呼び出し元の関数にあるので、これは問題ないはずだと思いますか、それとも違いますか?例:
inline const char &ToBoolean(bool val) const
{
return val ? (const char &)"1" : (const char &)"0";
}
これが私がそれを使うことを計画している方法です:
void testToBoolean1()
{
bool val = true;
const char *valStr = ToBoolean(val);
int result = strcmp("1", valStr);
CPPUNIT_ASSERT_EQUAL(0, result);
}
アップデート。
静的な文字列で問題がない場合は、これはどうでしょうか。
inline const char *ToBoolean(bool val) const {
char boolStr[6];
if (val) strcpy(boolStr, "true");
else strcpy(boolStr, "false");
return &boolStr;
}
これは、VC++2012を使用して正常にコンパイルおよび実行されます。