const用法详解:
主要用途:
定义一个不可修改的常量
1、修饰变量:
语法:const 数据类型 变量名 = 值;
示例:const int N=3;
说明:const修饰的变量必须在声明时初始化,并且之后不能被修改。
2、修饰指针
2.1、常量指针:
语法:数据类型 * const p = &a;
示例:int * const p=&a;
说明:指针本身的值(它所指向的地址)不能被修改,但指针所指向的内容可以被修改。
2.2、指向常量的指针:
语法:const 数据类型 * 指针名;
示例:const int *p = &a;
说明:指针所指向的内容不能被修改,但指针本身的值(即它所指向的地址)可以被修改。
2.3 、常量指针指向常量:
语法:const 数据类型 * const 指针名;
示例:const int * const p = &a;
说明:指针本身的值和指针所指向的内容都不能被修改。
3. 修饰函数参数:
用法:在函数参数列表中使用 const 可以确保函数不会修改传递给它的参数。
示例:void foo(const int &x) { ... }
4. 修饰函数返回值:
用法:返回常量可以防止函数返回的对象被意外修改。
示例:const int bar() { ... }
5. 修饰成员函数:
用法:在 C++ 中,const 修饰的成员函数表示该函数不会修改类的任何成员变量(除非它们是 mutable 的)。
示例:class MyClass { ... int getValue() const { ... } ... };
6. 修饰类对象
用法:在 C++ 中,使用 const 修饰的对象只能调用其 const 成员函数。
示例:const MyClass obj; obj.getValue(); // OK obj.nonConstFunction(); // Error
7. 注意事项
const 关键字可以提高代码的可读性和安全性,因为它明确表示某些数据或函数不会被修改。
使用 const 关键字可以帮助编译器进行更好的优化,因为它知道某些数据是常量,可以在编译时进行一些优化。
auto用法详解:
1、基本类型推导:
auto x = 10; // x 是 int 类型
auto y = 3.14; // y 是 double 类型
auto z = 'a'; // z 是 char 类型
2、初始化列表推导:
auto arr = {1, 2, 3, 4}; // arr 是 std::initializer_list<int> 类型
注意,如果你想要一个std::vector或其他容器类型,你需要显式指定类型或者使用std::vector的构造函数。
auto vec = std::vector<int>{1, 2, 3, 4, 5}; // 使用auto和std::vector的构造函数
3、引用类型推导:
int a = 10;
auto& ref = a; // ref 是 int& 类型,引用 a
4、指针类型推导:
int b = 20;
auto ptr = &b; // ptr 是 int* 类型,指向 b
5、复杂类型推导:
std::map<std::string, int> myMap = {{"apple", 1}, {"banana", 2}};
auto it = myMap.begin(); // it 是 std::map<std::string, int>::iterator 类型
6、函数返回类型推导:
在C++14及以后的版本中,你可以使用auto作为函数的返回类型,让编译器自动推导。
auto add(int a, int b) {
return a + b; // 返回类型是 int
}
7、模板中的类型推导:
在模板函数中,auto也可以用于推导模板参数的类型。
template<typename T, typename U>
auto add(T a, U b) {
return a + b; // 返回类型取决于 a 和 b 的类型以及它们是否支持加法操作
}
8、范围for循环中的类型推导:
在范围for循环中,auto通常用于推导容器中元素的类型。
std::vector<int> vec = {1, 2, 3, 4, 5};
for (auto elem : vec) {
// elem 是 int 类型
}
标签:const,推导,int,auto,用法,详解,类型,指针
From: https://blog.csdn.net/2301_80662593/article/details/139546156