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变量的值可能会导致程序错误。因此,应该尽量避免这样的做法。

C语言中const和C++11中constexpr的区别

原文地址: https://www.cveoy.top/t/topic/nbBj 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录