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)
因为该运算符是一个const函数,this并且它的所有成员(m_p)都应该是const.所以类型m_p是const 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)
或提供两种方法.
数字火星在这里是错误的.或者您可能需要启用一些警告.
| 归档时间: |
|
| 查看次数: |
189 次 |
| 最近记录: |