我不确定我是否遗漏了一些基本的东西.但我无法理解为什么编译器会为此代码生成错误:
class A { }; class B { public: B(); A* get() const; private: A* m_p; }; B::B() { m_p = new A; } A* B::get() const { //This is compiling fine return m_p; } class C { public: A* get() const; private: A m_a; }; A* C::get() const { //Compiler generates an error for this. Why? return &m_a; }
编辑:编译器错误是:错误C2440:'return':无法从'const class A*'转换为'class A*'转换失去限定符
const
在函数签名中告诉编译器可能不会修改对象的成员.然而,您返回const
指向成员的非指针,从而允许违反该承诺.
在你的类中B
,由于你没有返回指向成员的指针而你没有做出任何承诺,你返回它的副本(并且成员恰好是指针).