c++ - 如何将全局常量变量更改为可以通过函数分配的变量

标签 c++ c++11 global-variables constants extern

我有一些包含 const 的代码全局变量;代码需要扩展以支持参数化,即,基于参数,一些变量必须改变。碰巧有些需要改变的变量是全局的const

file1.h

const double a = 2;
const double b = 3;

file.h被多个不同的.cc继承使用 ab .


在线阅读后,我了解了 extern关键词。因此,根据一些指导原则,我执行了以下操作。

1) 声明ab作为externs在头文件中:file.h:

extern const double a;
extern const double b;

2) 创建了一个 file.cc我在其中使用函数为 a 赋值的文件和 b :

void setConsts(double parameter){
    /* request the linkage */
    extern const double a;
    extern const double b;

    if (parameter == 9){
        a = 2 * 9;
        b = 3 * 9;
    }
    else if (parameter == 10){
        a = 2 * 10;
        b = 3 * 10;
    }
    else{
        std::cout<<"parameter not supported"<<std::endl;

现在可能是因为 abconst我收到:

error: read-only variable is not assignable


改变全局的好方法是什么const s 变成可以通过函数定义的全局变量,但仍然确保它们在运行时不会被更改?

最佳答案

您不能写入const 变量。这就是它们首先成为 const 的全部意义。

如果您确实需要它们是非const,请从它们中删除“const”关键字并重新编译您的应用程序。

注意:使用 const_cast 工作并且会导致未定义的行为(不要去那里),因为对象最初是 const。所以甚至不要考虑这一点(顺便说一句,“C 风格转换”也是一个 const 转换)。

关于c++ - 如何将全局常量变量更改为可以通过函数分配的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38934435/

相关文章:

c++ - "Conditional"别名模板

c++ - 独立的事物相互影响(我不知道发生了什么)

c++ - 代码膨胀何时开始对性能产生显着影响?

c++ - 将字符串映射到 vector 或将不同的键映射到一个值

javascript - 在函数内部定义全局变量

variables - 访问具有在包内其他函数中的一个函数中定义的键值的变量

c++ - 英特尔 SIMD - 如何检查 __m256* 是否包含任何非零值

c++ - 当函数接受 T&& 的参数并传递左值时,模板参数 T 是否应该解析为 T&?

c++ - 用于多行字符串的 ECMAScript 正则表达式

php - Laravel Controller - 全局变量(字段)