c++ - 我如何编写一个 const 访问器来返回对成员对象的引用,以便它可以被编辑?

标签 c++ reference accessor constants

问题来了。我编写此函数以返回对成员 vector 的 i 元素的引用,因此可以编辑此元素。这是代码:

Letter& Literal::get (int i) const {

   return lit_m.at (i); //Vector of Letter objects
}

但是 g++ 不允许我将该元素分配给非常量引用:

g++ -o literal.o -c literal.cpp
literal.cpp: In member function ‘Letter& Literal::get(int) const’:
literal.cpp:34: error: invalid initialization of reference of type ‘Letter&’ from expression of type ‘const Letter’

如何解决?我的想法是构建一个类似于 vector 的 at() 函数的函数,因此它将是 const,因为它不会编辑对象本身,但它应该让我编辑返回的对象......这可能吗?

已解决:我只需要重载函数 :),所以声明一个 const 和一个非 const 版本。我担心 const 和非 const 重载是不允许的,但我看到 const 改变了参数列表,使之成为可能。

最佳答案

问题是这个成员函数:

Letter& get (int i) const

你把它声明为常量,因此,

const T& at() const

vector类的成员函数被调用,返回给你第i项的const引用,因此你不能修改它。

如果您确实需要修改该元素,请不要将您的 get() 函数声明为 const,并像您现在所做的那样返回对该元素的引用。

顺便说一下,您声明了函数 const,并且返回的是非常量引用。

关于c++ - 我如何编写一个 const 访问器来返回对成员对象的引用,以便它可以被编辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3979623/

相关文章:

c++ - 使用 atlbase.h 是否会使我编译的应用程序具有一些额外的依赖性?

c# - 列表分而治之——按值或引用传递

pointers - 范围引用而不是值

cocoa-touch - Core Data 自定义访问器甚至不会被调用

java - 允许使用 Checkstyle 的单行访问器(getter/setter)语法

c++ - 将 smart_pointer 传递给构造函数与原始指针

c++ - 高性能计算并节省线程标识符

c++ - 如何使类不可知其成员类型?

c# - 为什么我需要引用这个程序集,即使它没有被使用

python - (Python 2.7)使用访问器/更改器(mutator)从类访问变量