"const"只是意味着只读还是更多?

Kim*_*-wu 32 c c++ const

什么是const真正的意思?只读似乎包含了它对我的意义,但是,我不确定我是对的.

如果只读且const不同,有人可以告诉我为什么吗?

提出这个问题的原因是这个答案,他说const"只是"在C语中是只读的.我认为这一切都 const意味着,无论是C还是C++.他什么意思?

为了回答constC与C++中的具体差异,我创建了一个新问题:"const"在C和C++中有何不同?按照R ..的建议.

rus*_*lik 49

通过const在指示编译器时声明变量,您无意修改该变量.但这并不代表别人没有!它只是允许一些优化并通过编译错误通知(注意,它主要是编译错误,而const == ReadOnly这意味着运行时错误).

const并不意味着只读,因为你可以写const volatile,这意味着它可以随时改变,但我无意修改它.

编辑:这是一个经典的例子:考虑我正在编写从内存映射端口读取当前时间的代码.考虑RTC映射到内存DWORD 0x1234.

const volatile DWORD* now = (DWORD*)0x1234;
Run Code Online (Sandbox Code Playgroud)

这是const因为它是一个只读端口,volatile因为每次我读它都会改变它.

还要注意,许多体系结构有效地将全局变量声明为const只读,因为它是修改它们的UB.在这些情况下,UB将表现为运行时错误.在其他情况下,它将是一个真正的UB :)

这是一个很好的阅读:http://publications.gbdirect.co.uk/c_book/chapter8/const_and_volatile.html

  • 根据我的英文,"只读"意味着你只能阅读它,但不一定是它不会改变. (3认同)
  • @Kim:变量可以映射到某种形式的硬件设备.或者它可能是线程A具有const变量,并且它从线程B或......改变了任何数量的东西. (2认同)

sle*_*ica 7

编译器不允许声明的内容const被修改.就像你说的那样.

它主要用于函数原型,以通知用户函数在传递指针时不会触及此函数.它也可以作为自己的故障保护.

  • +1为"自己失败".如果您知道不应该更改某些内容,请将其声明为"const"并避免以后出现潜在错误. (2认同)