c++ 中的 auto 与 const 关键字

总是看到这两个关键字,根据 AI 的回复进行了一些整理总结。

在 C++ 中,autoconst 关键字都用于变量的声明和类型推导,但它们的作用不同。下面分别讲解它们的用法及注意事项。


1. auto 关键字

auto 是 C++11 引入的关键字,主要用于类型推导。当使用 auto 声明变量时,编译器会自动推导其类型,减少冗余代码,提高可读性。

基本用法

auto x = 10;      // int
auto y = 3.14;    // double
auto str = "hello"; // const char*

与指针、引用结合

int a = 10;
int& ref = a; // & 在这里表示引用,而不是取地址运算符
auto b = ref;   // b 是 int,而不是 int&,即 b 变成了 a 的一个拷贝

注意: auto 会忽略引用,b 只是 a 的拷贝。

  • 引用相当于变量的别名(alias)
  • ref 也相当于 a
  • 而 &ref 是 a 的内存地址

const 结合

const int val = 100;
auto x1 = val;     // x1 的类型是 int,const 属性被丢弃
const auto x2 = val; // x2 是 const int
auto& x3 = val;    // x3 是 const int&,保持 const

注意: auto 默认会忽略 const,如果希望保留 const,需要显式使用 const autoauto&

在函数返回值推导

auto func() {
    return 42; // 返回类型自动推导为 int
}

C++14 支持 decltype(auto),可以保留原始类型信息:

const int& getVal() { // int& 表示函数返回一个静态变量的引用,不会拷贝
    static const int x = 100;
    return x;
}

decltype(auto) res = getVal();  // res 是 const int&
  • 声明类的实例时,也可以用 auto

auto 不能用于

  • 函数参数(但 auto 可以用于模板)
  • 类的非静态成员变量

2. const 关键字

const 关键字用于声明常量或只读变量,防止修改数据,增强代码的安全性和可读性。

修饰变量

const int a = 10;
a = 20;  // ❌ 错误,a 不能被修改

修饰指针

int x = 10, y = 20;
const int* p1 = &x;   // 指针指向的值不能修改,即 p1 不能修改 x 的值,但可以指向不同的 int 变量
int* const p2 = &x;   // 指针本身不能修改
const int* const p3 = &x; // 指针和指向的值都不能修改

区分:

  • const int* p1(指向常量的指针): 不能通过 p1 修改 x,若不加 const 则可以修改
  • int* const p2(常指针): p2 不能指向其他地址,但可以修改 x
  • const int* const p3(指向常量的常指针): 既不能修改 x,也不能更改 p3

修饰函数参数

void func(const int& val) {
    // val 不能被修改
}

好处:

  • 避免误修改
  • 允许传递常量参数
  • 提高代码的可读性

修饰成员函数

class Test {
public:
    void show() const {  // 该成员函数不能修改成员变量
        // a = 20;  ❌ 错误
    }
private:
    int a;
};
  • 对于类中的函数,在声明时参数前面可以不加 const,但具体实现时加 const

3. autoconst 结合

const int a = 10;
auto b = a;   // b 是 int(const 被丢弃)
const auto c = a;  // c 是 const int
auto& d = a;  // d 是 const int&

如果 auto 需要保留 const 属性,必须要 const auto (即 constauto 之前) 或 auto&


总结

关键字作用示例
auto自动类型推导auto x = 10;
auto&保留引用auto& ref = var;
const声明不可变变量const int x = 10;
const auto保留 constconst auto y = x;
const int* p指针指向的值不可修改const int* p = &x;
int* const p指针本身不可修改int* const p = &x;
const int* const p指针和指向的值都不可修改const int* const p = &x;

总之,auto 让代码更简洁,而 const 使代码更安全,两者结合可以避免意外修改数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心态与习惯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值