C++错题整理

1.右值不可修改和引用

在这里插入图片描述
解析:
A错误,因为a++操作通过临时量返回其值,该值是一个常量,因此不能被修改(不是左值),而后缀++需要对左值进行操作,所以会引起编译错误。

所谓的左值,说通俗一点就是可以被修改和引用的值,左值可以取地址。与之相对的就是右值。在使用时,左值可以作为右值,但右值不能作为左值。

2.数据类型转换优先级在这里插入图片描述解析:在这里插入图片描述

3.运算符重载

在这里插入图片描述

在这里插入图片描述

运算符重载的规则:

  1. 只能重载已有的且被允许重载的运算符。
  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;
}

解释:

  1. 静态局部变量 localStaticVar

    • 它的作用域仅限于函数 func() 内,但其值在函数退出后保留。
    • 每次调用 func() 时,localStaticVar 会在上次的基础上自增,而不是重新初始化。
  2. 静态全局变量 globalStaticVar

    • 它的作用域是当前文件,即该变量只能在这个文件中使用,其他文件无法访问。
    • 它被自动初始化为 0,并且在程序的整个生命周期中存在,直到程序结束。

总结:

  • 静态局部变量 作用域在函数内部,但生命周期在整个程序期间;
  • 静态全局变量 作用域仅限于定义它的文件内,并且同样在程序运行期间一直存在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值