微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我仍然可以给 const 值一个新值

如何解决为什么我仍然可以给 const 值一个新值

enter image description here

书上说const的值一旦给了就不能改了,不过貌似给了还是可以给的。

#include<iostream>
using namespace std;
const int fansc(100);
cout<< fansc << endl; //output:100
int fansc(20);
cout<< fansc << endl;//output:20

解决方法

您提供的 C++ 代码无法编译,这是正确的。 const 变量(a) 是……常数。错误显示在以下程序和脚本中:

#include <iostream>
using namespace std;
int main() {
    const int fansc(100);
    cout << fansc << endl;
    int fansc(20);
    cout << fansc << endl;
}
pax> g++ --std=c++17 -Wall -Wextra -Wpedantic -o prog prog.cpp
prog.cpp: In function ‘int main()’:
prog.cpp:6:9: error: conflicting declaration ‘int fansc’
    6 |     int fansc(20);
      |         ^~~~~
prog.cpp:4:15: note: previous declaration as ‘const int fansc’
    4 |     const int fansc(100);
      |               ^~~~~

剩下您在评论中提到的 Anaconda 位。我对此几乎没有经验,但在我看来,唯一可行的方法是,如果第二个 fansc 定义以某种方式在与第一个不同的范围中创建。在真正的 C++ 代码中,这将类似于:

#include <iostream>
using namespace std;
int main() {
    const int fansc(100);
    cout << fansc << endl;
    { // new scope here
        int fansc(20);
        cout << fansc << endl;
    } // and ends here
    cout << fansc << endl;
}

输出是:

pax> g++ --std=c++17 -Wall -Wextra -Wpedantic -o prog prog.cpp && ./prog
100
20
100

(a) 是的,我知道这是一个自相矛盾:-)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。