C语言中const和C++11中constexpr的区别
const和constexpr都是用来定义常量的关键字,但是它们有一些不同之处。
'const'是C语言中用于定义只读变量的关键字,可以用于任何数据类型,包括基本数据类型和自定义类型。const定义的变量可以通过指针间接修改,但不能直接修改。
'constexpr'是C++11中引入的一个新特性,用于定义常量表达式。常量表达式是指在编译时就可以确定值的表达式。constexpr定义的常量可以用于任何数据类型,并且它们是真正的常量,不能通过指针修改。constexpr变量必须在定义时就被初始化,而且初始化表达式必须是常量表达式。
因此,const和constexpr都可以用于定义常量,但是constexpr更加严格,只能用于定义常量表达式,而const则可以用于任何只读变量。
你说const变量可以通过指针间接修改你能举个例子吗
当我们使用指向const变量的指针时,虽然指针本身是可变的,但是通过指针修改const变量的值是不合法的。但是,如果我们使用指向非const变量的指针,并将其强制转换为指向const变量的指针,则可以通过该指针间接修改const变量的值。以下是一个例子:
int main() {
const int num = 10;
int *ptr = (int *)# // 将指向非const变量的指针强制转换为指向const变量的指针
*ptr = 20; // 通过指针间接修改const变量的值
printf("%d", num); // 输出为10,const变量的值没有被修改
return 0;
}
这样的做法是不安全的,因为通过指针间接修改const变量的值可能会导致程序错误。因此,应该尽量避免这样的做法。
原文地址: https://www.cveoy.top/t/topic/nbBj 著作权归作者所有。请勿转载和采集!