【问题标题】:possible inconsistency in constant values? [closed]常数值可能不一致? [关闭]
【发布时间】:2015-02-15 14:29:10
【问题描述】:

在下面的代码中p 的指针和值都是常量,但b 可以改变*p 的值。它不直观。编译器不应该至少产生一个警告吗?

int b{3}
const int* const p{&b}
//*p = 5;  // correctly produces error
b = 5;     // constant value is changed
cout << *p << endl; // shows 5. 

【问题讨论】:

  • 是什么让您觉得int b{3} 构成一个常数值?这只是一个初始化。
  • 你的代码编译了吗?请从您的编辑器中复制代码并将其粘贴到此处,不要再次键入,因为它可能包含原始代码中没有的错误。
  • 另外const 并不意味着该值是恒定的,这意味着编译器会阻止您更改它,除非您明确强制更改,此外pconst 但@ 987654329@ 不是。
  • @iharob,这段代码在我的 ubuntu 机器上编译。

标签: c++ pointers constants


【解决方案1】:

b 未声明为const,因此您可以随意更改它。

仅仅因为您声明了指向const intconst 指针并不意味着int 本身实际上必须声明为const

例如,考虑这个例子。

int foo(int const& x)    // In the context of this function x is const
{
    return x + 5;
}

然后

int a = 3;        // Note, this is not const
int b = foo(a);
a += 6;           // This is fine!

在上面的示例中,a 不是const,而是作为const&amp; 传递到函数中。因此,只要您不尝试在foo 内修改x,您就没有做错任何事情。但是您可以将a 修改回foo 之外。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-09
    • 2013-09-06
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    相关资源
    最近更新 更多