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

C++中const和非const对象分别调用const和非const成员函数

一、先来提出问题 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

【CC++】中const函数详解

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

10110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    c++之const修饰成员函数

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

    65210

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

    const在类中,可以修饰成员变量和成员函数,主要目的也是保护成员内部的一些属性不被轻易的修改。以保证数据的完整性。下面分别介绍const修饰成员变量和成员函数。...const修饰成员变量表示成员常量,只能在初始化列表中赋值,可以被const和非const成员函数调用,但不能修改其值。...= 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函数

    25320

    expr_const函数前与函数后的区别

    const修饰常量,但是const并未区分编译时常量和运行时常量,而constexpr则只能是编译时常量,在C++11中提出。 这篇文章,将详细讲解constexpr。...目录 一、常量表达式 二、constexpr变量 三、constexpr函数 四、字面值类型 五、指针和constexpr 六、字面值常量类 参考 一、常量表达式 常量表达式(const expression...//np是一个指向整数的常量指针,其值为空 int j = 0; constexpr int i = 40; //i的类型是整数常量 //假设i和j都定义在函数体之外 constexpr const...注意,函数的返回值必须是字面值类型,但可以不是一个常量。 和其他类不同,字面值类型的类可能含有constexpr函数成员。这样的成员必须符合constexpr函数的所有要求,它们是隐式const。...类必须使用析构函数的默认定义,该成员负责销毁类的对象。 尽管构造函数不能是const的,但是字面值常量类的构造函数可以是constexpr函数

    76630

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

    1.const与#define相比有什么不同? const常量有数据类型,而宏常量没有数据类型。...有些集成测化的测试工具可以对const常量进行调试,但是不能对宏常量进行调试。 在C++程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。...在C++程序中,类里面的数据成员加上mutable后,修饰为const的成员变量,就可以修改它了。 2.sizeof与strlen的区别?...如果操作数是函数中的数组形参或函数类型的形参,sizeof给出指针的大小。 4.内联函数和宏函数的区别是什么?...内联函数和普通函数相比可以加快程序运行的速度,因此不需要中断调用,在编译的时候内联函数可以直接被镶嵌到目标代码中。而宏只是一个简单的替换。 内联函数制作参数类型检查,这是内联函数跟宏比的优势。

    46440

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

    cbegin和 cend都返回 const_iterator型别,甚至对于非 const 容器也是如此 //并且需要记住:STL一些成员函数取用指示位置的迭代器,例如插入,删除,它们也要求使用 const_iterator...函数 并传入一个const 容器会产生一个 const_iterator,而模板返回的正是这个迭代器。...和成员函数是否带有 const声明是一样的。...//宗旨:多个线程同时调用带有 const 得成员函数,如何保证线程的安全性 //const成员函数就一定是线程安全的吗?...成员函数意味着只读,多个线程在没有同步的条件下执行读操作是安全的 //但是,本案例并不安全,roots()虽然是const成员函数,但是企图改变两个 mutable的成员变量的值 //方法一:保证 const

    1.1K20

    C++中的const成员变量和成员函数

    在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定。const 可以用来修饰成员变量和成员函数。...const成员函数(常成员函数const 成员函数可以使用类中的所有成员变量,但是不能修改它们的值,这种措施主要还是为了保护数据而设置的。const 成员函数也称为常成员函数。...char *getname() const和char *getname()是两个不同的函数原型,如果只在一个地方加 const 会导致声明和定义处的函数原型冲突。...最后再来区分一下 const 的位置: 函数开头的 const 用来修饰函数的返回值,表示返回值是 const 类型,也就是不能被修改,例如const char * getname()。...函数头部的结尾加上 const 表示常成员函数,这种函数只能读取成员变量的值,而不能修改成员变量的值,例如char * getname() const

    26930

    【玩转腾讯云】C++学习笔记-函数const,new,delete

    一、函数const 加入函数const的意思是你不能修改参数,只能读取; 函数const的格式是:[返回值] [函数名](参数列表)const{}; 在外调用这类函数也分为 const 类名 对象名(参数初值...)和 类名 对象名(参数初值)调用区别如下表: 类名前面无const 类名前面有const函数const 可调用 可调用 无函数const 可调用 不可调用 再者,函数签名是包括const的,所以有无函数...const的同名函数是可以同时存在的。...; //对象z1,无可厚非是输出有函数const的那一个函数,但是对象z呢?...//其实在C++语言有个规则,前面无const会优先调用无函数const,而不是调用两个 二、new,delete 1、new,delete动作的拆解 //比如Zyf *z2 = new Zyf("ss

    42211

    const 详解

    const更大的魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。...所以很多C++程序设计书籍建议:"Use const whenever you need"。 二、const成员函数     任何不会修改数据成员的函数都应该声明为const类型。...如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误,这无疑会提高程序的健壮性。...以下程序中,类stack的成员函数GetCount仅用于计数,从逻辑上讲GetCount应当为const函数。编译器将指出GetCount函数中的错误。...    Pop();     //编译错误,企图非const成员函数 return m_num;   }   const成员函数的声明看起来怪怪的:const关键字只能放在函数声明的尾部

    1K10

    assert断言与const修饰指针的妙用(模拟实现strcpy函数

    const修饰指针的妙用 主要用法 按照const在*左边,在*右边,可以分为两大类。...const在*左边 限制的是指针指向的内容,不能通过指针变量改变指针指向的内容,但是指针变量本身是可以改变的 比如指针p指向的内容不可以改变,但是指针p本身是谁的地址是可以改变的 const在*...灵魂总结: 左定值,右定向 断言和const修饰指针的应用 讲了这么多关于断言和const修饰指针的知识,那就让我们来实践一下 模拟实现C语言strcpy函数 我们已知函数的参数有两个,将后面的字符串内容拷贝到前面去...可以看出,在设定这个函数时,就已经考虑到被拷贝的字符串的内容不能改变,所以就需要const来修饰指针,并且在*的左边,使得指针指向的内容不会更改。...//模拟实现strcpy函数 #include char* my_strcpy(char* str1,const char* str2)//const修饰被拷贝的字符串 { assert

    8010

    const指南

    基本词义  意思就就是说利用const进行修饰的变量的值在程序的任意位置将不能再被修改,就如同常数一样使用! ...使用方法 const int a=1;//这里定义了一个int类型的const常数变量a; 但对于指针来说const仍然是起作用的,以下有两点要十分注意,因为下面的两个问题很容易混淆! ...int a=10; int b=20; const int *pi; pi=a; cout <<*pi << "|" << a <<endl; pi=b; cout <<*pi...<< "|" <<b <<endl; cin.get(); } 上面的代码中最重要的一句是 const int *pi  这句从右向左读作: pi是一个指向int类型的,被定义成const...int *const pi=a; cout <<*pi << "|" <<a <<endl; cin.get(); } 上面的代码中最重要的一句是 const int *const pi

    676100
    领券