对C++中mutable、inline、volatile关键字的理解
2016-04-30 12:53
405 查看
1、mutable:修饰的变量永远处于可变状态。当一个成员函数的功能不包括改变对象的状态时,将其定义为一个const成员函数,这个函数是不能修改类的成员数据的,这样是为了数据安全,但是有时我们需要在这个函数内修改一些与对象状态无关的成员变量,这时就可以将那些成员变量用mutable声明。
相关博文:/article/1360359.html
2、inline:用于声明内联函数。一般函数调用时要将程序的执行权转给被调用的函数,然后在返回到调用它的函数,而内联函数在调用时直接在调用处用被调用函数的代码替换调用表达式。这样是为了提高函数调用效率。
①内联函数的作用相当于表达式形式的宏定义,但是比宏定义更安全好用。
②在类里面声明并定义的函数自动转化为内联函数,在类里声明,类外定义的函数要加inline关键字才能转化为内联函数。
③inline关键字只是给编译器的一个建议,当函数代码太多时这个建议有可能被拒绝。
④内联函数的定义要放在.h文件中,让编译器看到,也可以只在.h文件中声明而把定义放到.cpp文件中,这时需要在.h文件末尾#include "filename.cpp"
相关博文:/article/9425465.html
3、volatile:修饰易变的变量。对一个存储在内存中的变量,它除了可能会被代码修改以外,还可能会被编译器未知的因素修改,比如操作系统、硬件或其他线程。这样的变量应该声明为volatile。
①编译器会对非volatile变量的访问代码进行如下优化:当一段代码中出现了两次对这个变量的访问,且这两次访问语句之间的代码没有修改这个变量,那么编译器会将第一次访问时取到寄存器中的变量值赋值给第二次访问语句。
②但是如果这个变量有可能被操作系统、硬件、其他线程更改,那么这样的优化势必会造成第二次访问到的值不正确,如果用volatile声明这个变量,编译器就不会进行这个优化,每次访问这个变量都会从内存中取这个变量的值。
③const变量可以是volatile变量,因为const只是规定代码不能修改这个变量,但是其他因素可以修改。指向缓冲区的指针也可以是volatile变量,因为中断服务程序可能会修改这个变量。
相关博文:/article/7697709.html
推荐博文:
二叉树相关练习题(C++)
与字符串有关的一些典型问题的C++解法
一些可以用动态规划(DP)算法解决的问题(C++)
排列组合相关笔试面试题(C++)
与概率相关的算法题C++解法(附证明过程)
二分查找的巧妙运用(C++)
位运算在算法题中的使用(C++)
链表相关练习题(C++)
用实例讲解栈和队列(C++)
一些智力题的C++解法
相关博文:/article/1360359.html
2、inline:用于声明内联函数。一般函数调用时要将程序的执行权转给被调用的函数,然后在返回到调用它的函数,而内联函数在调用时直接在调用处用被调用函数的代码替换调用表达式。这样是为了提高函数调用效率。
①内联函数的作用相当于表达式形式的宏定义,但是比宏定义更安全好用。
②在类里面声明并定义的函数自动转化为内联函数,在类里声明,类外定义的函数要加inline关键字才能转化为内联函数。
③inline关键字只是给编译器的一个建议,当函数代码太多时这个建议有可能被拒绝。
④内联函数的定义要放在.h文件中,让编译器看到,也可以只在.h文件中声明而把定义放到.cpp文件中,这时需要在.h文件末尾#include "filename.cpp"
相关博文:/article/9425465.html
3、volatile:修饰易变的变量。对一个存储在内存中的变量,它除了可能会被代码修改以外,还可能会被编译器未知的因素修改,比如操作系统、硬件或其他线程。这样的变量应该声明为volatile。
①编译器会对非volatile变量的访问代码进行如下优化:当一段代码中出现了两次对这个变量的访问,且这两次访问语句之间的代码没有修改这个变量,那么编译器会将第一次访问时取到寄存器中的变量值赋值给第二次访问语句。
②但是如果这个变量有可能被操作系统、硬件、其他线程更改,那么这样的优化势必会造成第二次访问到的值不正确,如果用volatile声明这个变量,编译器就不会进行这个优化,每次访问这个变量都会从内存中取这个变量的值。
③const变量可以是volatile变量,因为const只是规定代码不能修改这个变量,但是其他因素可以修改。指向缓冲区的指针也可以是volatile变量,因为中断服务程序可能会修改这个变量。
相关博文:/article/7697709.html
推荐博文:
二叉树相关练习题(C++)
经典排序算法的C++实现
与字符串有关的一些典型问题的C++解法
一些可以用动态规划(DP)算法解决的问题(C++)
排列组合相关笔试面试题(C++)
与概率相关的算法题C++解法(附证明过程)
二分查找的巧妙运用(C++)
位运算在算法题中的使用(C++)
链表相关练习题(C++)
用实例讲解栈和队列(C++)
一些智力题的C++解法
相关文章推荐
- 同一个C语言工程不同C文件之间的函数互相调用问题(一)
- c++ operator的学习
- 模拟实现C语言中的字符串函数
- 图解Win7下安装Borland C++ 3.1失败记
- UE4:C++中使用材质
- CDHtmlDialog的基本使用(C++调用JS函数的实现)
- 成为C++高手之如何入门
- C语言多文件编译
- C++基础实践指导(下)
- C++基础实践指导(上)
- vector不是模板 || list不是模板解决办法
- c++ 如何用一个函数实现两个字符串的比较
- C++文件和流
- C语言中的atoi函数的实现
- [C++]详解异常处理(Exception Handling) 及标准库异常处理类
- c++ 智能指针用法详解
- C语言中结构体的直接赋值
- c++:template使用中的常见报错
- 一起talk C栗子吧(第一百三十八回:C语言实例--文件操作:基于文件描述符一)
- c/c++常用宏、预编译指令