首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从非const对象调用const函数

从非const对象调用const函数是C++中的一个概念,它涉及到const成员函数和const对象的使用。

在C++中,const成员函数是一种特殊的成员函数,它不能修改对象的状态。这意味着,const成员函数只能访问const成员变量,而不能访问非const成员变量。

当我们有一个const对象时,我们只能调用该对象的const成员函数。这是因为const对象不能被修改,因此我们只能调用不会修改对象状态的函数。

从非const对象调用const函数是一种错误的做法,因为它可能会导致对象的状态被意外地修改。为了避免这种错误,我们应该确保只有const对象才能调用const成员函数。

总之,从非const对象调用const函数是一种不安全的做法,应该避免。如果我们需要修改对象的状态,我们应该使用非const成员函数。如果我们只需要访问对象的状态而不修改它,我们应该使用const成员函数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++中constconst对象分别调用constconst成员函数

一、先来提出问题 const对象可以调用const成员函数吗? const对象可以调用const成员函数吗? const成员函数内可以调用其它的const成员函数吗?...const成员函数内可以调用其他的const成员函数吗?...二、实践出真知 1、const对象可以调用const成员函数 2、const对象不能调用const成员函数 3、const对象可以调用const成员函数 4、const对象可以调用const成员函数...5、const成员函数不能调用const成员函数 6、const成员函数可以调用const成员函数 我们知道c++在类的成员函数中还会隐式传入一个指向当前对象的this指针,所以在test类中,...下面解释为什么const 对象可以调用const成员函数, 1 class test{ 2 public: 3 void print()const; 4 }; 前面我们把const成员函数print

1.3K20

【C++】const对象const成员

const对象 定义类对象时可以将其指定为const对象。定义后const对象不能再被修改。 const对象不能调用const类型的成员函数。...如果一个对象被定义成const对象,那么它就不能调用这个类中的const成员函数const对象调用的成员函数一定都得是const!...\mian.cpp 34 1 test2 其实就是告诉我们const对象不能引用const成员函数 为什么要有这个规则: 因为在const成员函数内部可能对对象进行修改,比如set...3.const成员函数 const成员函数只能被const对象引用。const成员函数内可以引用const数据成员,也可以引用const数据成员,但不能修改const数据成员的值。...但不能调用const成员函数

1.1K10
  • 【CC++】中const函数详解

    形参带默认值的函数 给默认值的时候右向左给 定义处可以给形参默认值,声明也可以给默认值 形参给默认值时,不管定义处给,还是声明处给,形参默认值只能给一次 调用有默认值的函数效率会增大 inline...内联函数 inline内联函数: 在编译过程中就没有函数调用开销了,在函数调用点直接·把函数的代码进行展开处理了。...同时内联函数不再生成相应的函数符号。 inline只是建议 编译器把这个函数处理成内联函数。不一定会把所有的inline标志的函数处理成内联函数。...在debug版本上inline内联函数是不会起作用的,还是有mov,push,call指令。...inline内联函数 和普通函数的区别 普通函数有标准的函数调用开销,相反内联函数没有。 如果函数在短时间内大量调用,并且函数十分简单可以声明成内联函数const 怎么理解const

    10210

    c++之const修饰成员函数

    函数: 成员函数后加const后我们称这个函数为常函数; 常函数不可以修改成员属性 成员属性声明时加关键字mutable后,在常函数中依然可以修改 常对象: 声明对象前加const对象只能调用函数...this = NULL; //即Person* const this; //在函数后面加了const之后,变成const Person* const this...//用mutable修饰的为特殊变量,可以在常量函数中修改 void showPerson() const{ cout << "这是常函数" << endl; } };...void test() { const Person p;//在对象前加const,变为常对象 //常对象不能调用普通成员变量 p.age = 10; //特殊变量,在常对象下也可以修改...p.tmp = 20; //常对象只能调用函数 p.showPerson(); } int main() { test(); system("pause");

    65210

    【C++类和对象const成员函数及流插入提取

    而使用const对象调用const成员函数时,会调用const版本的函数。...const成员函数内可以调用其它的const成员函数 const成员函数内可以调用其他的const成员函数。...const对象不可以调用const成员函数 const对象的成员函数被隐式地视为const成员函数,因此只能调用const成员函数,而不能调用const成员函数。...const对象可以调用const成员函数 总结: 只读函数可以加const,其内部不涉及修改生成,便于constconst对象调用;而涉及对象修改生成的函数就不可以加const。...它的重载函数应该以ostream&类型作为返回值,并以一个 ostream&类型的参数(通常是输出流对象)和要输出的数据作为参数。 流提取运算符(>>)用于输入流中提取数据。

    12110

    C++ const常量对象、常量成员函数和常引用

    — 1 — 常量对象 如果不希望某个对象的值被改变,则定义该对象的时候可以在前面加 const 关键字。...这里有两个需要注意的点: 在常量成员函数中不能修改成员变量的值(静态成员变量除外); 也不能调用同类的 常量成员函数(静态成员函数除外)。...const Sample obj; obj.value = 100; // 出错,常量对象不可以被修改 obj.func(); // 出错,常量对象上面不能执行 常量成员函数...const int & r = n; r = 5; // error n = 4; // ok! 对象作为函数的参数时,生产该对象参数是需要调用复制构造函数的,这样效率就比较低。...可以用对象的常引用作为参数,如: class Sample { ... }; void Func(const Sample & o) // 对象的常引用作为参数 { ... } 这样函数中就能确保不会出现无意中更改

    1.4K20

    const修饰类中成员变量及函数

    const修饰成员变量表示成员常量,只能在初始化列表中赋值,可以被constconst成员函数调用,但不能修改其值。...= 300; } ~CConst(void); private: // const 成员变量 const int iValue; }; const修饰成员函数目的是不让函数修改类内部的数据成员,而且不会调用其他...const成员函数(如果调用则编译出错) #include using namespace std; class CConst { public: // 在初始化列表初始化const成员函数...CConst(void):x(200), y(300){} // const 成员函数中的const修饰符只能在函数名后面 void display() const { // 不能调用const函数,...修饰函数表示承诺不对数据成员进行修改,所以以下错误 //y = 200; } // 一个 const 成员函数 void display() { y = 200; input(); cout <

    25320

    JS底层理解var、let、const

    引用数据类型的值是保存在内存中的对象,JS不允许直接访问内存中的位置,所以在操作的时候操作的是对象的引用;因此是引用数据类型是按照引用访问的。...传递参数 参数传递就跟把函数外部的值复制给函数内部的参数; 基本类型传参 function addTen(num) { num+=10; return num; } const count...实际上,在函数内部重写 obj时,这个变量引用的就是一个局部对象了。而这个局部对象会在函数执行完毕之后立即销毁。...const 只能保证这个指针是固定的(即使总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,那就完全不能控制了。因此,将一个对象声明为常量必须非常小心。...const foo = {}; // 为 foo 添加一个属性,可以成功 foo.prop = 123; foo.prop // 123 // 将 foo 指向另一个对象,就会报错 foo = {};

    2K30

    如何使用 TypeScript 中的 as const 创建只读对象

    提高类型安全性:as const 创建的对象具有固定类型,这提高了代码的类型安全性,因为编译器可以确保对象始终具有相同的属性和值。...使代码更具可读性:as const 创建的对象能使代码更加清晰,明确表示该对象是只读的。...该对象有两个属性:name 和 age。一旦对象创建后,属性值不能被更改。 注意事项 适用于任何类型的对象:as const 不仅适用于字面对象,还可以用于其他类型的对象。...不适用于运行时值:例如,不能对一个包含对象的变量使用 as const。...可以与对象展开语法结合使用:可以创建一个新对象,该对象是现有对象的副本,但其中一些属性使用 as const 声明为只读。

    10210

    const、sizeof与内联函数相关面试题

    1.const与#define相比有什么不同? const常量有数据类型,而宏常量没有数据类型。...用它可以看看某种类型的对象在内存中所占的单位字节。 在动态分配一对象时,可以让系统知道要分配多少内存。 便于一些类型的补充。...内联函数和普通函数相比可以加快程序运行的速度,因此不需要中断调用,在编译的时候内联函数可以直接被镶嵌到目标代码中。而宏只是一个简单的替换。 内联函数制作参数类型检查,这是内联函数跟宏比的优势。...inline是指嵌入代码,就是在调用函数的地方不是跳转而是直接把代码写进去。...inline一般只用于以下情况: 一个函数不断被重复调用 函数只有简单的几行,且函数不包括for、while、switch语句。

    46440

    expr_const函数前与函数后的区别

    (1)执行初始化任务时,编译器把对constexpr函数调用替换成其结果值。为了能在编译过程中随时展开,constexpr函数被隐式地指定为内联函数。...此时编译器用对应的结果值(80)替换为对scale函数调用。 当我们用一个非常量表达式调用scale函数时,比如int i = 3的对象i,返回值则不是一个常量表达式。...相反的,定义在函数体之外的对象地址固定不变,能用来初始化constexpr指针。...constexpr把它所定义的对象置为了顶层const。...类必须使用析构函数的默认定义,该成员负责销毁类的对象。 尽管构造函数不能是const的,但是字面值常量类的构造函数可以是constexpr函数

    76630

    const成员函数一定是线程安全的吗?

    cbegin和 cend都返回 const_iterator型别,甚至对于 const 容器也是如此 //并且需要记住:STL一些成员函数取用指示位置的迭代器,例如插入,删除,它们也要求使用 const_iterator...,可能空间不够;即 std::vector 型别对象的尺寸 size 和 其容量capacity相等的时刻 此时,std::vector型别对象会分配一个新的,更大的内存块来存储其元素,然后它把元素现存的内存块转移到新的...arraySize22的值编译期可知 //总结:所有 constexpr对象都是const对象,而并非所有的const对象都是 constexpr对象。...Point& p) noexcept { Point result;//创建一个 const的Point对象 result.setX14(-p.xValue()); result.setY14...// • 比起 constexpr 对象或 constexpr 函数而言, constexpr 对象或是constexpr 函数可以用在一个作用域更广的语境中 条款16:保证const成员函数的线程安全性

    1.1K20
    领券