const的常见使用
1.const定义常量
const修饰的变量不可被修改
int main() {
int a = 10;
const int b = 20;
b = a + b;
std::cout << "b: " << b << std::endl;
}
编译报错:
const.cpp: In function 'int main()':
const.cpp:5:11: error: assignment of read-only variable 'b'
b = a + b;
^
const修饰的变量一定需要初始化!!
const int b;
int main() {
std::cout << "b: " << b << std::endl;
}
编译报错:
extern.cpp:2:11: error: uninitialized const 'b' [-fpermissive]
const int b;
^
2.指针与const
定义
- const int *ptr: 指向int型常量的指针,即指针指向的值为常量,不可被修改
- int const *ptr: 同上
- int *const ptr: 指向int型的常量指针,即指针为常量,指针不能指向其他变量,但是指针指向的值(为变量)可以被修改
- const int *const ptr: 指向int型常量的常量指针,即指针为常量,指针指向的值也为常量,指针指向的值不能被修改,指针也不能再指向其他值
好绕啊,总结一下就是:const在*
左,值为常量;const在*
右,指针为常量
代码为栗
- const int *ptr:
#include <iostream>
int main() {
int a = 85;
const int *ptr = &a; //声明一个指向常量的指针
std::cout << "*ptr: " << *ptr << std::endl; //打印:*ptr: 85
int b = 8585;
ptr = &b; //可以修改指针的指向
std::cout << "*ptr: " << *ptr << std::endl; //打印:*ptr: 8585
*ptr = 8585; //error, 想修改指针指针指向的值,但这个值现在是个const,不能被修改
std::cout << "*ptr: " << *ptr << std::endl;
}
# "*ptr = 8585"会引起error:
const_ptr.cpp:10:10: error: assignment of read-only location '* ptr'
*ptr = 8585; //error, 想修改指针指针指向的值,但这个值现在是个const,不能被修改
^~~~
- int *const ptr:
#include <iostream>
int main() {
int a = 85;
int *const ptr = &a; //常量指针初始化
//int *ptr = &a;
std::cout << "*ptr: " << *ptr << std::endl; //打印:*ptr: 85
int b = 8585;
*ptr = b; //修改常量指针指向的变量值
std::cout << "*ptr: " << *ptr << std::endl; //打印:*ptr: 8585
ptr = &b; //error, 想修改指针,但是这里是个常量指针,不可被修改
std::cout << "*ptr: " << *ptr << std::endl;
}
# "ptr = &b"会引起error:
ptr_const.cpp:10:10: error: assignment of read-only variable 'ptr'
ptr = &b;
^