char [N]与char*

use*_*370 1 c++ operator-overloading

谁能告诉我为什么以下代码存在编译错误?

struct Foo {
  char m_p[8];
  inline operator char *() const { return m_p; }
};
Run Code Online (Sandbox Code Playgroud)

通过GCC 4.5,我收到了以下消息:

错误:从'const char*'到'char*'的无效转换

而数字火星编译器没有任何问题.

编辑:下面列出的答案提到了函数的const限定符.我真正没有得到的是为什么以下代码没有这样的问题:

struct Foo2 {
  char *m_p;
  inline operator char *() const { return m_p; }
};
Run Code Online (Sandbox Code Playgroud)

ken*_*ytm 6

因为该运算符是一个const函数,this并且它的所有成员(m_p)都应该是const.所以类型m_pconst char[8].它不能被隐式转换char*const-ness将丢失.转换const char*为OK.

你可以让它返回一个 const char*

 inline operator const char *() const { return m_p; }
Run Code Online (Sandbox Code Playgroud)

或删除const限定符

 inline operator char *() { return m_p; }
Run Code Online (Sandbox Code Playgroud)

或提供两种方法.

数字火星在这里是错误的.或者您可能需要启用一些警告.