返回单个char文字作为指针

时间:2015-07-07 15:33:56

标签: c++ c++11 gcc clang

虽然以下功能适用于g ++ 4.8.3(使用C ++ 11)

char* fn() {
    return '\0';
}

clang ++ 3.6(使用C ++ 11)会产生以下错误:

cannot initialize return object of type 'char *' with an rvalue of type 'char'

那么为什么这种差异以及如何使这两种编译器能够正常工作呢?

2 个答案:

答案 0 :(得分:2)

  

以下功能适用于g ++ 4.8.3 [...]

函数编译的事实并不意味着它实际上有效。代码返回一个转换为指针的字符常量。

如果要返回指向'\0'的指针,则需要将其分配到内存中某些位置,该位置在函数返回时不会失效,例如:使用staticnew

char* fn1() {
    static char res = '\0';
    return &res;
}

char* fn2() {
    char *res = new char;
    *res = '\0';
    return res;
}

fn1的来电者需要注意他们对结果所指向的char所做的更改,因为它在所有来电者之间共享。

另一方面,fn2的来电者在完成结果后必须致电delete,以避免内存泄漏。

答案 1 :(得分:2)

您的代码不会将char转换为char *,而是提升char' \ 0'到nullptr。它使用普通return 0

进行相同的转换