get函数中的返回值

obj*_*ect 0 c++

这是一个理解在下面的场景中实现get函数的正确方法的问题.

我得到了以下课程:

class A
{
   string m_sName;
public:
   A(): m_sName ("this") {}
   const string& getName() const
   {
      return m_sName;
   }
};
Run Code Online (Sandbox Code Playgroud)

上面执行get函数的问题是,它允许客户端修改数据成员.那是:

int main ()
{
   A a;

   const string& data_mem = a.getName();

   string& s = const_cast<string&> (data_mem);

   s += " Pointer";

   cout << a.getName().c_str () << endl;

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出将是:这个指针

我知道我们可以使用引用参数来获取函数或只是返回字符串.但两者都会创造新的对象.

有一个更好的方法吗?或者禁止const_cast(在用户定义的类上)?

Bat*_*eba 7

C++让你有能力用脚射击自己.

程序员应该const_cast极其谨慎地使用:意识到使用它来抛弃const最初声明为的对象的行为const未定义的.

代码分析工具可以帮助您.