善用const

2024-01-21 22:08
文章标签 const 善用

本文主要是介绍善用const,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先,有些人会问?为啥要使用const,我使用宏定义不是照样可行?

开发C++已有五年多的时间了,有时当遇到需要定义常量时,总有一个问题一直很疑惑,到底是用宏定义#define,还是用const修饰。现在终于有了答案,废话不多说,先上代码

#define CALL_WITH_MAX(A,B) F((A) > (B) ?(A) : (B));

光看这个宏,就有太多的缺点,首相你要使用它,不能忘记加小括号。即使你加了小括号,也会引起非常严重的错误

int A=5,B=0;

CALL_WITH_MAX(++A,B);//A将会递增2次

CALL_WITH_MAX(++A,B+10); //A将递增1次

从上面的验证不难看出,A的递增并非是我们想要的结果。

那么,有没有更好的办法来避免这种情况呢?

再看下面的代码:

template<typename T>

inline void CALL_WITH_MAX(const T& A,const T& B) {

f( A > B ? A :B);

}

有人会问,为啥这么做就能避免上面的情况发生呢?

主要是因为当用const 修饰符时,就等于你告诉编译器说:嘿,我在这加const了哈,值不能被修改了。

所以说,养成用const的良好习惯,对你的代码效率会有很大的提升,也使你的代码的错误几率降低。

这篇关于善用const的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/630968

相关文章

c++的初始化列表与const成员

初始化列表与const成员 const成员 使用const修饰的类、结构、联合的成员变量,在类对象创建完成前一定要初始化。 不能在构造函数中初始化const成员,因为执行构造函数时,类对象已经创建完成,只有类对象创建完成才能调用成员函数,构造函数虽然特殊但也是成员函数。 在定义const成员时进行初始化,该语法只有在C11语法标准下才支持。 初始化列表 在构造函数小括号后面,主要用于给

s let 和const的区别 ,它们可以变量提升吗

在 JavaScript 中,let 和 const 是 ES6 引入的新变量声明关键字,它们与之前的 var 关键字相比,有几个重要的区别。特别是关于变量提升(hoisting)的行为不同。 变量提升(Hoisting) 在 JavaScript 中,“变量提升”是指变量声明会被提升到作用域的顶部,但变量的初始化不会。这意味着你可以先使用变量,然后再声明它。然而,let 和 const 的行

C++中const关键字的使用方法,烦透了一遍一遍的搜,总结一下,加深印象!!!

之前一直在学习C/C++,关于const的使用,这里出现一点,那里出现一点。知识用时方恨少,这一段时间正好各种笔试题,其中关于const的用法也是层出不穷,所以疲于在书本上各种翻,这里汇总一下,加深自己的印象的同时,也方便以后查阅和学习。菜鸟一个,若有错误,望指正! const关键字 常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。不管出现在任何上

const与#define的优缺点

1.define由预处理程序处理,const由编译程序处理 2.#define不分内存,因为它是预编译指令,编译前进行了宏替换。const 不一定?某种说法,Const常量是占有内存的被“冻结”了的变量 3.const定义常量是有数据类型的,这样const定义的常量编译器可以对其进行数据静态类型安全检查,而#define宏定义的常量却只是进行简单的字符替换,没有类型安全检查,且有时还会产生边际

【C++】类中成员函数声明后面接 const

const 表示对类中成员函数属性的声明; 表示不会修改类中的数据成员; 在编写const成员函数时,若不慎修改了数据成员,或者调用了其他非const成员函数,编译器将指出错误; 以下程序中,类stack的成员函数GetCount仅用于计数,从逻辑上讲GetCount应当为const函数。 class Stack{public:void Push(int elem);int Pop(vo

【C++】C++中的关键字:const、mutable、auto、new....

七、C++中的关键字:const、mutable、auto、new、 本部分打算是尽量多的罗列出C++中的关键字和一些花式操作。先总结一下我们之前讲过的:private、public、protect: 参考【C++】类、静态、枚举、重载、多态、继承、重写、虚函数_静态与多态:重写、重载、模板-CSDN博客中的第5小标题,可见性。static: 参考【C++】类、静态、枚举、重载、多态、继承、重写

[跨平台C++] 返回const char* 类型的函数样板

返回const char*类型的函数 方法1: const char* GetPathByFileNameFull(const char* szFileName_Full) { // const char* p = strchr(szFileName_Full,'\\'); //start 0 position find "\\"const char* p = strrchr(szF

7.const指针问题

double* ptr = &value;     //ptr是一个指向double类型的指针,ptr的值可以改变,ptr所指向的value的值也可以改变  const double* ptr = &value     //ptr是一个指向const double类型的指针,ptr的值可以改变,ptr所指向的value的值不可以改变 double* const ptr=&v

2.C语言实现函数void *memmove(void *dest, const void *src, size_t n)。memmove 函数的功能是拷贝src所指的内存内容前n个字节到dest所指

//用C语言实现函数void * memmove(void *dest, const void *src, size_t n)。memmove//函数的功能是拷贝src所指的内存内容前n个字节到dest所指的地址上。//分析:由于可以把任何类型的指针赋给void类型的指针,这个函数主要是实现各种数据类型的拷贝。//要考虑正向拷贝和反向拷贝问题#include<stdio.h>#include<

善用工具:开发与效率

文章目录 常用工具Visual Studio Code(VS Code)GitDockerPostman 效率对比VS Code 与 Sublime TextGit 与 SVNDocker 与虚拟机Postman 与 cURL 近来趋势人工智能与编程工具的结合低代码与无代码平台版本控制的演进准备自适应的开发环境与新兴技术的整合 团队合作工具协作平台(例如:Slack 和 Microsoft