【问题标题】:Setting pointer to const object after creating object创建对象后设置指向 const 对象的指针
【发布时间】:2013-01-27 18:50:41
【问题描述】:
class a
{
    const std::string * ptr;
    void setPtr(const std::string & text)
    {
       ptr = &text; //it's wrong, I can set something to the pointer only at definition
    }
}

解决办法是什么?指向我的对象的指针必须是 const(a 类的对象不能修改它),但我需要在运行时更改指针(它指向的位置)。

【问题讨论】:

  • 我很困惑。不能修改,但需要修改?
  • @Marc Glisse 丢弃限定符 [-fpermissive]
  • 这和C++11有什么关系?
  • @David 我接受 c++11 解决方案,但在这种情况下,我看到代码没问题,并且我的代码中有 consts 错误。
  • 我看不到什么被丢弃了。当人们不发布他们的真实代码而只发布他们认为相关的代码时,这是一个常见的问题。

标签: c++ pointers constants


【解决方案1】:

你可以用你当前的代码做到这一点。这一行

const std::string * ptr;

表示ptr 是指向const std::string 的指针。 ptr 本身不是常量,所以你可以改变它指向的东西。

this working demo

【讨论】:

  • 我明白了。所以我的代码有问题,因为我得到了丢弃限定符 [-fpermissive]....
  • @user1873947 您未显示的代码可能有问题。
【解决方案2】:

您要么在示例中遗漏了const

void setPtr(const std::string & text) const

或者你打电话给setPtr const

const a* foo = something;
foo->setPtr(somestring);

基本上有三个规则:

您不能通过const 成员函数修改非常量a 实例。
您不能通过 const 指针或对其的引用来修改非常量 a 实例。
您不能修改 const a 实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-26
    • 2021-08-05
    • 1970-01-01
    • 2012-11-07
    • 2021-05-18
    • 2022-01-04
    • 2010-09-18
    • 1970-01-01
    相关资源
    最近更新 更多