对于这个函数const int func(const int& a) const声明中,三个const分别是什么意思?

第一个const 函数的返回值类型是const。 这个const修饰没什么意义,你可以想象一下: 既然是函数的  返回值,而且是值传递的形式,是否const有什么意义。如果指针(引用)传递,怎表示返回值的内容不可修改:一般用在赋值操作中,例: const A& operator =() { ... }第二个const修改函数的输入参数,这样可以提高效率。如:用实参b调用const int func(const int& b) const时,将跳过调用的过程(不复制函数),而直接运行它的内容。如果去掉这个const 将是const int func(int &a)  const,这样就是引用传递的方式,可以对实参的值进行修改。如果是值传递const int func(int a),它与const int func(const int &a )  的区别是将会复制这个函数,会降低效率。第三个const表示它不会修改它的数据成员(也就是函数中的变量)。一般来讲,凡是不会修改数据成员的都应该定义为const 版本。

我也不知道你理解没,反正第一个const 有和没有是没区别的。第二个const 修饰引用传递(const int & a)是提高效率的。第三个是表示不会修改它的数据成员,一般用在类的重载函数中


第一个是表示返回值是个int型的常值第二个代表是个const型的引用,就是这个a是可以引用一个int型变量,但是不可以改变这个变量的值(可以读值)第三个代表这个函数(应该是类中的成员函数),不可以改变调用对象中的数据成员的值。(可以读写数据成员的值,不可以改写其值)

				
时间: 2024-08-29 17:38:27

对于这个函数const int func(const int& a) const声明中,三个const分别是什么意思?的相关文章

const int *a和int *const a的区别

关键问题点:const 属于修饰符 ,关键是看const 修饰的位置在那里1.const int *a 这里const 修饰的是int,而int定义的是一个整值 因此*a 所指向的对象 值 不能通过 *a 来修改,但是 可以重新给 a 来赋值,使其指向不同的对象 eg:        const int *a = 0;        const int b = 1;        int c = 1;       a = &b  //  额外:注意不能通过a 来修改 b值       a = &a

int *p,cons int *p,int const *p,int * const p,const int * const p,int const * const p的区别

 加有const关键字的几种情况的辨析 const修饰的代码 含义(特点) 等价性 int *p = # 1.       可以读自己 2.       可以通过*p改自己 3.       可以通过p = &data来看别人 权限最大 cons int *p = # 1.const放在左边意味着指向的是常量,这个常量不可以修改, 2.p = &data; (地址可以修改) 3.*p = 30;(这个时候是错误的) 这两者等价(应用:查看别人的账户) i

编写一个函数func(),将此函数的输入参数(int型)逆序输出显示,如54321 –> 12345,要求使用递归,并且函数体代码不超过8行

public class Test{ //中间变量 private String res = "0"; //方法 public int func(int i){ if(i>0){ int temp = i%10; res = res+String.valueOf(temp); func(i/10); } return Integer.valueOf(res); } public static void main(String[] args){ Test t=new Test();

C++ char*,const char*,string,int 的相互转换

C++ char*,const char*,string,int 的相互转换 1. string转const char* string s ="abc";const char* c_s = s.c_str(); 2. const char*转string 直接赋值即可 const char* c_s ="abc";string s(c_s); 3. string转char* string s ="abc";char* c;constint len

喜闻乐见的const int *p、int* const p、const int* const p

不废话直接代码示例: 1 void f(const int *p) { 2 3 int b = 10; 4 5 *p = 10; // error 6 7 p = &b; // fine 8 9 } 10 11 void f(int* const p) { 12 13 int b = 10; 14 15 *p = 10; // fine 16 17 p = &b; // error 18 19 } 20 21 void f(const int* const p) { 22 23 int b

x86_64 xercexc: error: cast from 'const void*' to 'long int' loses precision [-fpermissive]

mingw编译x86_64版本xerces-c-2.8.0: 修改src/xercesc/util/HashPtr.cpp: unsigned int HashPtr::getHashVal(const void *const key, unsigned int mod , MemoryManager* const) { return ((long long)key % (unsigned long)mod); } 修改src/xercesc/internal/XSerializeEngine.

const int *p 和int * const p 的区别

看例子: int sloth = 3; const int *p1 = &sloth; int * p2 const = &sloth; 这样申明的话,不允许使用p1来修改sloth的值,但是p1可以指向其他的地址: 可以利用p2修改sloth的值,但是p2不允许指向其他地址. 第二个例子: 1. int gorp = 16; int chips = 12; const int *p_snack = &gorp *p_snack = 20; (X) p_snack = &c

【转】const int *p和int * const p的区别(常量指针与指向常量的指针)

[转]作者:xwdreamer   出处:http://www.cnblogs.com/xwdreamer 对于指针和常量,有以下三种形式都是正确的: const char * myPtr = &char_A;//指向常量的指针 char * const myPtr = &char_A;//常量的指针 const char * const myPtr = &char_A;//指向常量的常量指针 下面依次对这三种类型进行介绍. 因为*操作符是左操作符,左操作符的优先级是从右到左,对于

c语言中函数的形参test(int *&a)?

今天在看一段c代码的时候看到一个函数的形参是(int *&a)居然是这个东西,这让我好生疑惑啊,不知道用这么多的地址符号用意何在呢?传址么? 那也不必这样,只需要用指针完全能够达到这样的效果啊,交换两个整形变量的数据,只要定义一个函数 swap(int* a,int *b) 在函数里面交换*a和*b的值即可了,这样便达到了修改形参而且改变实参的作用呀. 于是我去图书馆拿了一本c语言语法的书籍,发现&符号是取地址的作用,那么*&是个啥东西呢,一直没有看见. 最后在c++的一本书上也看