yyF*_*red 4 c++ constants const-correctness member-functions c++11
我正在阅读 C++ Primer 第 5 版第 258 页。问题是,const 对象能否调用其非常量成员函数,即使该成员函数不修改其数据?
销售数据.h
#include <iostream>
#include <string>
struct Sales_data {
    // data members
    std::string bookNo;
    unsigned units_sold = 0;
    double revenue = 0.0;
    // memeber functions
    const std::string isbn() const { return bookNo; }
    Sales_data& combine(const Sales_data&);
    double avg_price() const { // *
        if (units_sold) {
            return revenue / units_sold;
        }
        return 0.0;
    }
};
std::ostream& print(std::ostream &os, const Sales_data& data) {
    os << data.isbn() << " " << data.units_sold << " " << data.avg_price();
    return os;
}
use_Sales_data.cpp
#include <iostream>
#include "Sales_data.h"
using  namespace std;
int main(){
    Sales_data data;
    data.bookNo = "CSAPP";
    data.units_sold = 2;
    data.revenue = 50;
    print(cout, data);
}
当我删除constfor 函数时avg_price,代码不会编译。但我认为该函数avg_price()不会修改对象。我的猜测是,在 的参数列表中print,我将Sales_dataobject声明为 asconst并且 C++ 不允许 const 对象调用其非常量成员函数。是这种情况吗?
是的。记住两件事——
原因: