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

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

EasyC++33,引用const

这是EasyC++系列的第33篇,来聊聊引用const引用const 前文当中说过,我们可以让函数接收一个引用变量,从而免去变量拷贝的开销,达到提升程序运行效率的目的。...如果我们想要传递引用,但又不希望在函数内部对引用的变量进行修改,以免影响外部变量。我们可以使用常量引用,也就是加上const修饰符。...double sqrt(const double &x); 由于我们加上了const修饰符,当我们在函数内部对引用进行修改的时候,会触发编译器的报错。...所以后来版本的C++优化了这个问题,禁止了传递引用时创建临时变量。而当引用const修饰时并不会对原值进行修改,并不会影响逻辑和结果,所以豁免了这个禁令。...const修饰符的优点 在函数签名当中,如果要接收引用,我们要尽可能使用const,我们来看下这样做的好处: 可以避免无意中修改数据 可以处理constconst参数,否则,只能接受const变量

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

    临时变量作为const引用进行参数传递引发的编译错误

    其中文意思为临时变量无法为const引用初始化。也就是在参数传递的过程中,出现错误。...当这个临时对象传递给const的string&引用类型时,因为const引用绑定对象时,要求该对象也是非const对象。而在这时,因为string类型的临时对象是const对象,所以就出现错误。...---- 2.所有的临时对象都是const对象吗 为什么临时对象作为引用参数传递时,必须是常量引用呢?很多人对此的解释是临时对象是常量,不允许赋值改动,所以作为非常量引用传递时,编译器就会报错。...这个解释在关于理解临时对象不能作为const引用参数这个问题上是可以的,但不够准确。...IntClass(6)表示生成一个无名的临时对象,传递给const引用,在print函数中通过引用修改了这个临时对象。这说明了并非所有的临时对象都是const对象。

    2.6K31

    再论C++中的const引用

    今天给大家分享一下这段时间学习c++的总结学习:c++里面的const关键字和引用。 一、const关键字的总结 1、const什么时候为只读变量,什么时候又是常量呢?...const标识符,都被作为只读变量处理 (2)const引用的类型与初始化变量的类型 相同:初始化变量成为只读变量 不同:生成一个新的只读变量 代码版本一: #include int...,这个变量是编译器为x分配而没有使用的空间;引用代表变量的别名,而变量代表一段内存空间的别名,所以引用代表一段内存空间的别名 int& nrx = const_cast(rx); /...(赋值、取地址等)都会传递到代表的变量上 const引用使其代表的变量具有只读属性 引用必须在定义时初始化,之后无法代表其它变量 (3)从使用c++语言的角度来看: 引用与指针没有任何的关系 引用是变量的新名字...const引用能够生成新的只读变量 在编译器内部使用指针常量实现"引用" 编译时不能直接确定初始值的const标识符都是只读变量 好了,今天的分享就到这里,如果文章中有错误或者不理解的地方,可以交流互动

    41810

    const修饰符的使用(修饰结构体指针,引用外部的const 变量)

    const修饰符的使用 //const修饰变量为只读 const int a = 10; a = 20;//是错误的赋值 //指针变量 指针指向的内存 两个不同的概念 char buf[] =...const封锁的是指针变量,不能修改其指向,但是可以修改指针指向内存当中的内容。...char* const p2 = buf; p2[1] = '3';//可以进行赋值 p2 = "hello";是错误的 const char * const p2 = buf; //进行双重封锁,即既不能修改指针的指向...//结构体指针的指向不可以修改 p = NULL是错误的 //结构体指针指向的内容可以修改 p->a = 10是可以修改的 } void fun4(const my_struct * const...p) { //结构体指针的指向不可以修改 //结构体指针指向内存当中的内容也不可以修改 } 如何引用其他.c文件中的const变量 extern const int a;//注意,不能再进行赋值

    54310

    C++的引用const指针的关系以及各种传递方式

    首先我们知道 const int *p 与 int const *p 是一样的,即 *p 是常量;而 int * const p 跟上面是不一样的,即 p 是常量;我们知道引用只是一个别名,与变量共享存储空间...其实引用的底层就是用const指针来实现的。...引用const int & 呢我们也可以类比为  const int * const p 即既不能成为别的变量的引用,也不能通过引用更改变量的值。...,那只能使用指针的指针了,即 **, 或者指针引用 *& 而且使用指针比较不保险的是很多人会忘记加上const的限制,即很可能接下来的程序中你又把这个指针指向了其他的变量,这样就混乱了。...其实函数返回的是局部变量sum的引用,而 n2 本身又是引用,即引用着原来sum 拥有的那块区域,第一次打印没有出错是因为本来写在sum 区域上的值11 尚未被覆盖,而再运行两条打印语句后再次打印,很可能原来属于

    80070

    C++引用和指针以及const常量限定符,能说一二吗?

    故不能定义引用引用!而且引用不能与字面值或某个表达式结果绑定在一起,如下是错误的:int &a=10。(再注意:常量引用可以绑定字面值或一般表达式:const int &a=10正确!)...引用必须初始化给具体的对象,并将一直绑定在一起。 总结:没有指向引用的指针,可有对指针的引用! ? const限定符: const int a=24;//const对象必须初始化,正确!...const int b;//错误! 常量引用: 相对普通引用而言,引用绑定到const对象上时,称常量引用,最大的区别是常量引用不能用作修改其绑定的对象。...(严格说,引用不是对象,不存在常量引用一说法,人们常常喜欢用它时,不过方便描述罢) 引用const: 例1 const int a=24; const int &b=a;//此时引用引用对应的对象都是常量...底层const:指针所指对象是const。更一般地,指针与引用等复合类型的基本类型部分是常量时,可称为底层const

    85120

    const 详解

    ;  //合法    2、 必须初始化    const int i=5;    //合法    const int j;      //非法,导致编译错误    3、在另一连接文件中引用const...#define I=10    const long &i=10;  /*dapingguo提醒:由于编译器的优化,使得在const long i=10; 时i不被分配内存,而是已10直接代入以后的引用中...困惑,看到const关键字,C++程序员首先想到的可能是const常量,如果只知道用const定义是常量,那么相当于把火药仅用于制作鞭炮。...如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它const成员函数,编译器将指出错误,这无疑会提高程序的健壮性。...    Pop();     //编译错误,企图const成员函数 return m_num;   }   const成员函数的声明看起来怪怪的:const关键字只能放在函数声明的尾部

    1K10

    const指南

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

    676100

    const详解

    3.1.2 如果参数为引用 如果输入参数为引用,加上const 之后既起到了保护作用,也提高了程序效率。...但是一般返回引用的地方并不是很多,一般会出现在类的赋值函数中。而且,用const 修饰返回值为引用类型的更少。一般来说不常用。...;//const }; const函数 const 对象只能访问const 成员函数,const 的对象可以访问任何成员函数,包括const 成员函数。...如果函数名、参数、返回值都相同的const成员函数和const成员函数是可以构成重载,那么const对象调用const成员函数,const对象默认调用const的成员函数。...const成员函数可以访问所有成员变量,但是只能访问const的成员函数。 const成员函数,可以访问任何成员,包括const成员成员函数。

    40430

    1.C和C++区别,以及const分析(底层const顶层const)

    注意:const变量不能被直接赋值,但是可以通过指针来修改const变量....由于const局部变量会存在栈里,而const全局变量会存在只读存储内存上 所以我们可以通过指针来修改const局部变量,但是修改const全局变量,会使程序崩溃. 2.2修改const实例 1)实例1...C++中的const 3.1 介绍 在C++中,const变量则是真正的常量了,定义时会将其放入符号表中. 所以编译途中遇到使用const变量时,则直接从符号表中取出常量....指针const分为两种: 底层const, 顶层const (普通变量的const(或引用)永远是顶层const,也就是说,const int 和int const本质都一样) 1)底层const(位于...和引用非常相似,例如: int a=1; int b=3; //int *const p; //错误,没有被初始化 int *const p=&a; //顶层const //p=&b;

    86220

    【小白学习C++ 教程】八、在C++指针传递引用Const关键字

    引用传递 引用传递是指通过引用将参数传递给函数。调用时,该函数可以通过使用传入的引用来修改参数的值。 这使我们能够: 修改函数参数的值。 出于性能原因,避免复制变量/对象。...以下代码显示了传递引用的示例。...现在正在做引用传递而不是值传递。你认为这现在会输出什么?...因此输出为 3 9 使用 Const 传递 const关键字告诉编译器,这样的变量不会改变的。 比如:double const pi = 3.14;。如果我们尝试更改pi,编译器将抛出错误。...因此,为了节省不修改参数值的函数的计算成本,我们实际上可以更进一步并使用const引用: int triple(int const &i) { return i * 3; } const 确保参数不会改变

    32240
    领券