【问题标题】:passing ‘const this argument discards qualifiers [-fpermissive]传递 'const 这个参数会丢弃限定符 [-fpermissive]
【发布时间】:2012-06-01 16:58:42
【问题描述】:

我有一个类 Cache,它的函数 write 指定为

bool write(const MemoryAccess &memory_access, CacheLine &cl);

我是这样调用这个函数的。

const Cache *this_cache;
c = (a==b)?my_cache:not_cache;
c->write(memory_access,cl);

上面一行给了我以下错误

“将‘const Cache’作为‘bool Cache::write(const MemoryAccess&, CacheLine&)' 丢弃限定符 [-fpermissive]。"

this 参数是特定于编译器的,它有助于代码修改和破坏局部命名空间变量的优先级。但是这里没有传递这样的变量。

【问题讨论】:

  • 请尝试修正你的例子:你谈论函数write,然后你打电话给read。你在哪里声明memory_accesscl
  • 这个参数是编译器特定的,它有助于代码修改和破坏本地命名空间变量的优先级???

标签: gcc g++


【解决方案1】:

当您通过指向对象的指针调用方法时,该对象将作为this 指针隐式传递给该方法。 c 可能有 const Cache* 类型。由于方法write 未声明为const,因此它具有可从其主体访问的非常量this 指针,需要丢弃cconst 限定符。

【讨论】:

    【解决方案2】:

    由于cconst Cache * 类型,你只能在其上调用const 成员函数。

    你有两个选择:

    (1) 从c的声明中删除const

    (2) 像这样更改Cache::write()

     bool write(const MemoryAccess &memory_access, CacheLine &cl) const;
    

    (注意末尾添加的const。)

    【讨论】:

    【解决方案3】:

    此外,如果你的类的方法返回任何成员的指针,你不应该忘记在返回类型示例之前写 const:

    const float * getPosition() const{...}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多