1.右值不可修改和引用
解析:
A错误,因为a++操作通过临时量返回其值,该值是一个常量,因此不能被修改(不是左值),而后缀++需要对左值进行操作,所以会引起编译错误。
所谓的左值,说通俗一点就是可以被修改和引用的值,左值可以取地址。与之相对的就是右值。在使用时,左值可以作为右值,但右值不能作为左值。
2.数据类型转换优先级
解析:
3.运算符重载
运算符重载的规则:
- 只能重载已有的且被允许重载的运算符。
- 重载之后,运算符的优先级和结合性不会改变,也不能够改变。
- 重载的功能应当与原有功能相类似,不能改变原运算符的操作对象个数,同时至少要有一个操作对象是自定义类型.
4.volatile的作用和使用场景
在C++中,volatile
关键字用于告诉编译器该变量的值可能会被外部因素更改,防止编译器对其进行优化,以确保每次访问该变量时都从内存中读值而不是从寄存器中读。
使用场景:
主要用于多线程编程中访问共享变量、硬件寄存器(如嵌入式开发中控制IO端口)、或处理中断服务例程中的数据。
5.static
静态局部变量只会初始一遍
1. 静态局部变量(static local variable):
- 作用域仅限于函数或代码块内。
- 它的生命周期是整个程序运行期间(不会随着函数结束而销毁)。
- 如果未初始化,会被自动初始化为
0
。
2. 静态全局变量(static global variable):
- 作用域仅限于当前文件(文件内部可见,无法被其他文件访问)。
- 也具有整个程序运行期间的生命周期。
- 同样,如果未初始化,自动初始化为
0
。
代码示例:
#include <iostream>
// 静态全局变量
static int globalStaticVar; // 默认初始化为0
void func() {
// 静态局部变量
static int localStaticVar = 0; // 只会初始化一次
// 每次调用,localStaticVar 的值会保留上次修改后的值
localStaticVar++;
std::cout << "localStaticVar: " << localStaticVar << std::endl;
}
int main() {
// 调用三次 func
func(); // 输出: localStaticVar: 1
func(); // 输出: localStaticVar: 2
func(); // 输出: localStaticVar: 3
// 静态全局变量
std::cout << "globalStaticVar: " << globalStaticVar << std::endl; // 输出: globalStaticVar: 0
globalStaticVar = 10;
std::cout << "globalStaticVar: " << globalStaticVar << std::endl; // 输出: globalStaticVar: 10
return 0;
}
解释:
-
静态局部变量
localStaticVar
:- 它的作用域仅限于函数
func()
内,但其值在函数退出后保留。 - 每次调用
func()
时,localStaticVar
会在上次的基础上自增,而不是重新初始化。
- 它的作用域仅限于函数
-
静态全局变量
globalStaticVar
:- 它的作用域是当前文件,即该变量只能在这个文件中使用,其他文件无法访问。
- 它被自动初始化为
0
,并且在程序的整个生命周期中存在,直到程序结束。
总结:
- 静态局部变量 作用域在函数内部,但生命周期在整个程序期间;
- 静态全局变量 作用域仅限于定义它的文件内,并且同样在程序运行期间一直存在。