c++ - 通过引用问题传递 const 对象

标签 c++ parameter-passing

假设我们有以下代码:

#include <iostream>

class Person{
public:
    Person(int age);
    int get_a();
private:
    int a;
};

Person::Person(int age)
{
    a = age;
}

int Person::get_a()
{
    return a;
}

void Show_Age(Person P)
{
    std::cout<<P.get_a()<<std::endl;
}

int main() {

    Person P(10);
    Show_Age(P);
    return 0;
}

现在假设我们有一个重对象,我们应该通过引用传递 Person,所以我们继续:

void Show_Age(Person &P)
{
    std::cout<<P.get_a()<<std::endl;
}

没有问题,但一个很好的观察结果是 P 应该是 const,我们尝试一下:

void Show_Age(const Person &P)
{
    std::cout<<P.get_a()<<std::endl;
}

编译失败:

error: passing ‘const Person’ as ‘this’ argument of ‘int Person::get_a()’ discards qualifiers [-fpermissive]

如何解决?

最佳答案

你应该标记 get_a const 以便编译:

class Person{
public:
    Person(int age);
    int get_a() const;
private:
    int a;
};

int Person::get_a() const
{
    return a;
}

这样做告诉编译器成员函数不会修改对象的状态,使其与 const 指针和引用兼容。

关于c++ - 通过引用问题传递 const 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12408004/

相关文章:

Bash - 用 `set` 恢复位置参数有什么意义?

java - 在 Java 中按引用传递与按值传递

c++ - 如何在 Win32 中操作键盘输入?

php - 将复选框 ID 传递给另一个 php 文件

c++ - Xerces 与 string.h 冲突

c++ - 何时使用外部链接初始化全局常量不受静态初始化顺序惨败的影响?

c - 如何从单独的函数解析命令行参数

function - "call-by-value"的不同含义有关联吗?

c++ - 需要字符表

C++ << 运算符进出数据库