首页 > 后端开发 > 正文

为什么类里要有const函数,const函数在类里有什么作用?

2024-11-25 21:12:30 | 我爱编程网

今天我爱编程网小编整理了为什么类里要有const函数,const函数在类里有什么作用?相关内容,希望能帮助到大家,一起来看下吧。

本文目录一览:

为什么类里要有const函数,const函数在类里有什么作用?

php中const和define的区别

define部分:
宏不仅可以用来代替常数值,还可以用来代替表达式,甚至是代码段。(宏的功能很强大,但也容易出错,所以其利弊大小颇有争议。)

宏的语法为:

#define 宏名称 宏值
作为一种建议和一种广大程序员共同的习惯,宏名称经常使用全部大写的字母。

利用宏的优点:

1)让代码更简洁明了

当然,这有赖于你为宏取一个适当的名字。一般来说,宏的名字更要注重有明确直观的意义,有时宁可让它长点。

2)方便代码维护

对宏的处理,在编译过程中称为“预处理”。也就是说在正式编译前,编译器必须先将代码出现的宏,用其相应的宏值替换,这个过程有点你我在文字处理软件中的查找替换。所以在代码中使用宏表达常数,归根结底还是使用了立即数,并没有明确指定这个量的类型。

const部分

常量定义的格式为:

const 数据类型 常量名 = 常量值;
而const定义的常量具有数据类型,定义数据类型的常量便于编译器进行数据检查,使程序可能出现错误进行排查。常量必须一开始就指定一个值,然后,在以后的代码中,我们不允许改变此常量的值。

两者之间的区别:
内存空间的分配上。define进行宏定义的时候,不会分配内存空间,编译时会在main函数里进行替换,只是单纯的替换,不会进行任何检查,比如类型,语句结构等,即宏定义常量只是纯粹的置放关系,如#define null 0;编译器在遇到null时总是用0代替null它没有数据类型(还有疑问请找C语言书籍看预处理部分或者看MSDN.而const定义的常量具有数据类型,定义数据类型的常量便于编译器进行数据检查,使程序可能出现错误进行排查,所以const与define之间的区别在于const定义常量排除了程序之间的不安全性.

为什么类里要有const函数,const函数在类里有什么作用?

关于PHP5与PHP7的若干问题

一、
1、在Zend引擎和扩展中,经常要创建一个PHP的变量,底层就是一个zval指针。之前的版本都是通过MAKE_STD_ZVAL动态的从堆上分配一个zval内存。而PHP7可以直接使用栈内存。PHP代码中创建的变量也进行了优化,PHP7直接在栈内存上预分配zval。这样节约了大量内存分配和内存管理的操作。
2、zend_string存储hash值,array查询不再需要重复计算hash
3、PHP5的hashtable每个元素都是一个
Bucket
*,而PHP7直接存Bucket,减少了内存申请次数,提升了Cache命中率和内存访问速度。
4、PHP的C扩展函数与PHP中的变量进行参数输入时,要使用zend_parse_parameters()函数,这个函数根据一个字符串参数找到对应PHP的zval指针,然后进行赋值。
这个函数实际上有一定的性能消耗。PHP7直接使用宏替换了zend_parse_parameters函数,C扩展中不再需要使用zend_parse_parameters进行逐个参数的查找,宏展开后自动会实现参数赋值。仅此一项就提升了5%的性能。
5、很多PHP程序中会大量使用call_user_function,
is_int/string/array,
strlen
,
defined
函数。PHP5
都是以扩展函数的方式提供,PHP7中这4类函数改成ZendVM的OPCODE指令,执行更快。
除了上面5个主要优化点之外,PHP7还有其他更多的细节性能优化。如基础类型int、float、bool等改为直接进行值拷贝,排序算法改进,PCRE
with
JIT,execute_data和opline使用全局寄存器等等。PHP7对性能的优化会继续进行下去。
二、有一群人,
创建了一个PHP6的项目,
主要的目的是为PHP引擎增加Unicode支持.
当时开发者们同时维护5和6的开发,
慢慢的大家发现新功能都等着提交给6,
而6因为开发速度慢,
导致很多新特性没法提交,
状态很不理想.
再后来6就没人开发了
三、不太了解、我只用git下的php7主干代码

为什么类里要有const函数,const函数在类里有什么作用?

我爱编程网(https://www.52biancheng.com)小编还为大家带来为什么类里要有const函数,const函数在类里有什么作用?的相关内容。

const是一个C语言的关键字,它限定一个变量不允许被改变,产生静态作用。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别
人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。另外CONST在其他编程语言中也有出现,如C++、PHP5、
C#.net、HC08 C。
主要作用

(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放入RAM中 ......
double i=Pi; //此时为Pi分配内存,以后不再分配!
double I=PI; //编译期间进行宏替换,分配内存
double j=Pi; //没有内存分配
double J=PI; //再进行宏替换,又一次分配内存!
const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是像#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干份拷贝。
(6) 提高了效率。
编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。 我爱编程网

以上就是为什么类里要有const函数,const函数在类里有什么作用?全部内容,更多相关信息,敬请关注我爱编程网。更多相关文章关注我爱编程网:www.52biancheng.com

免责声明:文章内容来自网络,如有侵权请及时联系删除。
与“为什么类里要有const函数,const函数在类里有什么作用?”相关推荐
public const int 在C#里 const是什么意思
public const int 在C#里 const是什么意思

publicconstint在C#里const是什么意思CONST是C#定义常量的关键字,同时也是C,C++,php定义常量的关键字;“常量”一般是指编程语言里面,程序运行时,不会被修改的量;例如:publicconstdoublegravitationalConstant=6.673e-11;定义常量 gravitationalConstant的,它的值是万

2024-09-07 11:35:33
php 为什么调用 类中函数要用 $this->
php 为什么调用 类中函数要用 $this->

php为什么调用类中函数要用$this->类方法调用在其他语言通常是点(.),而php将点当作连接符,所以才用单箭头。类的本质和命名空间一样,都是控制作用域,像::运算符。php中切换命名空间使用斜杠(忘了是正的还是反的了)。这些运算符相当于声明。php"直接用类名"和"new实例化"调用函数哪种方法效率更高?1.首先用法不同,__new__()用于创建实例,所以该方法是

2024-07-19 03:19:28
PHP的构造函数理解不了?他和类里面的函数有什么区别?
PHP的构造函数理解不了?他和类里面的函数有什么区别?

phpecho()和print()、require()和include()函数区别说明1.echo和print的区别PHP中echo和print的功能基本相同(输出),但是两者之间还是有细微差别的。echo输出后没有返回值,但print有返回值,当其执行失败时返回flase。因此可以作为一个普通函数来使用,例如执行下面的代码后变量$r的值将为1。$r=print“Hell

2024-07-20 08:16:37
Php类和函数有什么差别
Php类和函数有什么差别

Php类和函数有什么差别楼主得去多了解一下面向对象。举个例子给你听吧比如你要做个电子商务网站,那肯定会有购物车功能。那我们先建立一个购物车的类,购物车class,那光一个类没什么用啊。那我们要建立很多方法和变量,比如商品加入购物车function,修改数量function,取消已经添加商品function。这样一个购物车的类就好了,接下来你要用这些个方法你就可以实例化这个类new购物车cla

2024-08-20 05:44:02
idea里面java类显示为灰色是什么意思??没有报错
idea里面java类显示为灰色是什么意思??没有报错

idea里面java类显示为灰色是什么意思??没有报错在IntelliJIDEA中,Java类显示为灰色通常意味着该类没有被使用。这可能是因为您在代码中没有对该类进行任何引用,或者该类的方法和属性都没有被使用。如果该类不被使用,那么它可能不会对程序的功能产生影响。但是,如果该类是您需要使用的,您可以采取以下步骤来解决显示灰色的问题:检查您的代码是否正确引用了该类。检查您的代码

2024-04-13 18:11:42
php里面的一个问题,里函数经常有M 、I 这一类的代表什么来的呢?
php里面的一个问题,里函数经常有M 、I 这一类的代表什么来的呢?

ThinPHP3.2.2中I函数获取整个GET参数,这样会不会更好I()函数不加参数跟$_REQUEST的作用是相同的,里面可以加get.post.,分别获取get与post的参数,这个没有什么太大的区别,但是个人觉得$_GET要好一些,这个是PHP的获取参数,I()函数是tp中封装的一个函数,还要经过转换什么的。php里面的一个问题,里函数经常有M、I这一类的代表什么来的呢?看你的代

2024-09-10 09:42:13
php A类的构造函数里实例化B类对象,B类的构造函数里实例化A类对象,当中某一类实例化时会发生什么?
php A类的构造函数里实例化B类对象,B类的构造函数里实例化A类对象,当中某一类实例化时会发生什么?

【PHP】依赖注入(DI)和控制反转(IOC)详解依赖注入与控制反转在技术领域常被提及,实际是同一种设计模式,旨在减少组件间的耦合度。下面以PHP为视角,深入解析依赖注入概念。想象我们有一个类需要使用数据库连接,最原始方法是将数据库类文件包含在构造函数中,通过新实例化db类并传入连接信息,之后调用数据库操作。这看似实现功能,但问题随之而来:随着越来越多类需用到db组件,修改代码时若数据

2025-01-22 07:19:40
如何在php里重写php的内置函数或类
如何在php里重写php的内置函数或类

如何在php里重写php的内置函数或类不能重写。只能改其它名字自己写函数。如果需要兼容PHP版本,比如新版本有这个函数,旧版本没有,旧版本上运行起来会出错。可以用function_exists加个判断如:if(!function_exists('array_combine')){    function array_combine($arr1,$arr2){  

2024-07-30 22:59:13