为了账号安全,请及时绑定邮箱和手机立即绑定

当C++在函数声明时,后面跟个const是什么意思?有什么意义?

当C++在函数声明时,后面跟个const是什么意思?有什么意义?

C++ C
白猪掌柜的 2021-11-25 21:15:47
如:有下面的函数声明:double d() const;其中的“const“有什么用?是什么意思?请举例说明下什么时候用这种形式?谢谢!!!
查看完整描述

3 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

C++在函数声明时,后面跟个const是限定函数类型为常成员函数, 常成员函数是指不能改变成员变量值的函数。

例如“double d() const;”,其中的其中的“const”限定了d()函数中不能有任何改变其所属对象成员变量值的功能,如果有则会在编译阶段就报错。

它的主要作用就是能使成员函数的意义更加清楚,我们可在不改变对象的成员函数的函数原型中加上const说明。在需要增加可读性和减少逻辑出错的情况下,就可以用这种形式。

扩展资料:

简单介绍

一、const与define。两者都可以用来定义常量,但是const定义时,定义了常量的类型,所以更精确一些。#define只是简单的文本替换,除了可以定义常量外,还可以用来定义一些简单的函数,有点类似内联函数(Inline)。const和define定义的常量可以放在头文件里面。(小注:可以多次声明,但只能定义一次)

二、》》const与指针和引用。

1、const与指针。

先来看看下面的几种定义:

int me;

const int* p1 = &me;//p1可变,*p1不可变,此时不能用*p1来修改,但是p1可以转向

int* const p2 = &me;//p2不可变,*p2可变,此时允许*p2来修改其值,但是p2不能转向。

const int* const p3 = &me;//p3不可变,*p3也不可变,此时不能用*p3来修改其值。

2、指针和引用的区别很简单,就是引用更简洁,更安全。因为引用声明时必须初始化。 引用更接近const指针,一旦与某个变量关联,就将一直效忠于他。

3、const指针可以接受const和非const地址,但是非const指针只能接受非const地址。所以const指针的能力更强一些,所以尽量多用const指针,这是一种习惯。



查看完整回答
反对 回复 2021-11-29
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

const是一个C语言(ANSI C)的关键字,具有着举足轻重的地位。它限定一个变量不允许被改变,产生静态作用。

使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一定帮助。另外CONST在其它编程语言中也有出现,例如Pascal、C++、PHP5、B#.net、HC08 C、C#等。

const的作用:

1、可以定义const常量,具有不可变性。 

例如:const int Max=100; Max++会产生错误; 

2、便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。

例如: void f(const int i) { .........} 编译器就会知道i是一个常量,不允许修改; 

3、可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。 同宏定义一样,可以做到不变则已,一变都变!

如1中,如果想修改Max的内容,只需要它修改成:const int Max=you want;即可!

4、可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。 还是上面的例子,如果在函数体内修改了i,编译器就会报错; 

例如: void f(const int i) { i=10;//error! } 

5、可以节省空间,避免不必要的内存分配。

例如: 

#define PI 3.14159 //常量宏 

const double Pi=3.14159; //此时并未将Pi放入ROM中 ...... 

6、提高了效率。 

编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

扩展资料:

const 的时候都会混淆它与 define 的区别。从功能上说它们确实很像,但它们又有明显的不同:

1、define是预编译指令,而const是普通变量的定义。define定义的宏是在预处理阶段展开的,而const定义的只读变量是在编译运行阶段使用的。

2、const定义的是变量,而define定义的是常量。define定义的宏在编译后就不存在了,它不占用内存,因为它不是变量,系统只会给变量分配内存。

但const定义的常变量本质上仍然是一个变量,具有变量的基本属性,有类型、占用存储单元。可以说,常变量是有名字的不变量,而常量是没有名字的。

有名字就便于在程序中被引用,所以从使用的角度看,除了不能作为数组的长度,用const定义的常变量具有宏的优点,而且使用更方便。所以编程时在使用const和define都可以的情况下尽量使用常变量来取代宏。

3、const定义的是变量,而宏定义的是常量,所以const定义的对象有数据类型,而宏定义的对象没有数据类型。所以编译器可以对前者进行类型安全检查,而对后者只是机械地进行字符替换,没有类型安全检查。这样就很容易出问题,即“边际问题”或者说是“括号问题”。



查看完整回答
反对 回复 2021-11-29
?
侃侃无极

TA贡献2051条经验 获得超10个赞

const Stock land =Stock("hyd");
land.show();
land 是常量,但是类成员函数 show 无法保证不修改 land,所以编译器将拒绝执行该段代码。除非你能保证 show 像 const 函数一样,但这需要另外一种语法,即:
void show() const; (声明)
void Stock::show() const {}; (定义)

const 的用法在 C++ 里是很有讲究的 参考一下 《Effective C++》吧
以下摘自其中条款三
const 成员函数
将const 实施于成员函数的目的,是为了确认该成员函数可作用于const 对象身上。这一类成员函数之所以重要,基于两个理由。
第一,它们使 class 接口比较容易被理解。这是因为,得知哪个函数可以改动对象内容而哪个函数不行,很是重要。
第二,它们使"操作 const 对象"成为可能。这对编写高效代码是个关键,因为如条款 20 所言,改善 C++ 程序效率的一个根本办法是以 pass by reference-to-const 方式传递对象,而此技术可行的前提是,我们有 const 成员函数可用来处理取得(并经修饰而成)的 const 对象。
简而言之 const 在这里是修饰 函数 的



查看完整回答
反对 回复 2021-11-29
  • 3 回答
  • 0 关注
  • 1070 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信