当 extern const 被赋予新值而没有任何错误时,程序失败。需要对此进行解释

Program is failing when extern const is assigned with new value without any error. Need explanation regarding this

我在 main.cpp 中有一个 extern const int 变量,我正在 mathFunctions.cpp 中使用它。如果我尝试修改 mathFunctions.cpp 中的变量,程序就会失败。 我在 C++ 11 中使用最新版本的 CodeBlocks。

如果我不尝试修改变量,程序运行正常。

//main.cpp
#include <iostream>
using namespace std;
extern const int valueTen = 10;
int addValue(int);
int main()
{
    cout << addValue(2) << endl;
    return 0;
}
//mathFunctions.cpp
extern int valueTen;
int addValue(int x){
    valueTen++; //program stops because of this line
    return x + valueTen;
}

当你编译你的 main.cpp 文件时,语句 extern const int valueTen = 10; 告诉编译器 valueTen 变量是一个常量,并且在 运行-时间。通常,这将 'pass on' 向链接器发出信号,表明它可以在具有 READONLY 属性的内存区域中为该变量分配 space。

当您编译 mathFunctions.cpp 文件时,语句 extern int valueTen; 告诉编译器 valueTen 是一个整型变量,其定义由另一个模块提供。在此文件中,没有任何内容告诉编译器 valueTenconst,因此当您包含修改其值的代码时不会出现编译器错误。

但是,当您构建了程序(链接了所有单独的模块)后,valueTen++; 语句生成的代码将尝试修改位于 READONLY 内存中的内容 - 并且这将导致程序崩溃,并显示 "Access violation."

行的消息

随时要求进一步澄清and/or解释。