[英]Call non-const function on a const object
我正在阅读 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);
}
当我删除函数avg_price
的const
,代码不会编译。 但我认为函数avg_price()
不会修改对象。 我的猜测是,在print
的参数列表中,我将Sales_data
对象声明为const
并且 C++ 不允许 const 对象调用其非常量成员函数。 是这种情况吗?
是的。 记住两件事——
原因:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.