gpt4 book ai didi

c++ - C中的这些声明有什么区别?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:48:50 26 4
gpt4 key购买 nike

在 C 和 C++ 中,以下声明的作用是什么?

const int * i;
int * const i;
const volatile int ip;
const int *i;

以上声明是否有误?

如果不是,它们之间的含义和区别是什么?

上述声明的有用用途是什么(我的意思是在什么情况下我们必须在 C/C++/嵌入式 C 中使用它们)?

最佳答案

const int * i;

i 是指向常量整数的指针。 i 可以更改为指向不同的值,但不能更改 i 指向的值。

int * const i;

i 是指向非常量整数的常量指针。 i 指向的值可以更改,但不能更改 i 以指向不同的值。

const volatile int ip;

这个有点棘手。 ipconst 的事实意味着编译器不会让您更改ip 的值。然而,它仍然可以在理论上进行修改,例如通过获取其地址并使用 const_cast 运算符。这是非常危险的,不是一个好主意,但它是允许的。 volatile 限定符表示任何时候 ip 被访问,它应该总是从内存中重新加载,即它不应该缓存在寄存器中。这会阻止编译器进行某些优化。当你有一个可能被另一个线程修改的变量,或者如果你正在使用内存映射 I/O,或者其他可能导致编译器行为的类似情况时,你想使用 volatile 限定符可能不会期待。在同一个变量上使用 constvolatile 是很不寻常的(但合法的)——你通常会看到一个而不是另一个。

const int *i;

这与第一个声明相同。

关于c++ - C中的这些声明有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/232472/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com