C++:实现一个全局常量,其值由用户给出
C++: implementing a global constant whose value is given by the user
首先,让我说我已经阅读了有关如何初始化全局变量或如何正确实现全局常量的类似线程。然而,这些问题并没有真正帮助我解决我的具体问题,也没有我咨询过的任何其他资源。问题如下。
我(必须(在头文件 header.h 中声明一个变量,该变量必须是常量并由 main 中的 main 函数使用.cpp以及在另一个文件函数中定义的其他函数.cpp(之前在 header.h 中声明(。问题是这个常量是一个运行时常量,其值由用户给出。我应该怎么做?
我认为我最好的选择是执行以下操作。在标题中。
// Header guard
namespace n
{
// Some forward declarations
extern const double mu; // The constant that should be initialized by the user.
// Some other declarations
}
然后在函数中.cpp
#include "header.h"
namespace n
{
// Some definitions here
double function_that_uses_mu(double a, double b)
{
// Some code using mu
return somedouble;
}
// Some other definitions
}
最后是主要的.cpp
#include "header.h"
#include <iostream>
int main()
{
// Some code
double value_of_mu{};
std::cin >> value_of_mu;
// Validity check
extern const double n::mu{ value_of_mu };
// More code
return 0;
}
问题是编译失败是由于error: ‘mu’ has both ‘extern’ and initializer
.但是,如果我尝试mu = value_of_mu
显然会得到一个错误,因为我将分配给一个 const 值(而不是初始化它(。所以我不知道如何继续,或者我的代码有什么问题。我必须尊重两个强制性事实:
定义、函数/全局常量声明和 main 必须在上述三个文件中拆分。
mu 将被定义为所有三个文件共享的常量。
这可能吗?如何?
编辑:
我认为我的问题是 exten 变量无法在函数内初始化,但如果是这样,我就不知道我该怎么做我想要做的事情。
想一想:如果需要在程序的生命周期内设置一个值,那么它并不是一个真正的常量。 因此,您不应该尝试通过将其声明为const
来假装它是一个常量。 如果不希望程序意外更改其值,则必须以其他方式保护它,例如使其成为类的私有成员变量。 这样,您可以将访问限制为仅返回mu
的值作为 const。
// muholder.h
class muholder
{
private:
double m_value;
public:
muholder (double ivalue): m_value(ivalue) {}
double const &value() const { return m_value; }
};
// workflow_envelope.h
class workflow_envelope
{
private:
muholder m_mu;
public:
workflow_envelope (double imu): m_mu(imu) {}
bool validity_check();
double method_that_uses_mu (double a, double b) const { return a*m_mu.value()/ b; }
void run(); // any "more code" goes in here.
};
// main
#include "workflow_envelope.h"
#include <iostream>
int main()
{
// Some code
double value_of_mu;
if (std::cin >> value_of_mu)
{
// Validity check
workflow_envelope workflow(value_of_mu);
if (workflow.validity_check())
{
workflow.run();
return 0;
}
}
return 1;
}
初始化变量时,不能指定extern
。这应该可以代替:
int main()
{
// Some code
double value_of_mu{};
std::cin >> value_of_mu;
// Validity check
using namespace n;
const double mu = value_of_mu; // no extern specifier
// More code
return 0;
}
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 什么时候在C++中返回常量引用是个好主意
- 代理对象的常量正确性
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- C++如何通过用户输入删除列表元素
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 通过多个头文件使用常量变量
- 如何使用用户输入在C++中正确填充2D数组
- C++MySQL C api用户输入行
- C++:实现一个全局常量,其值由用户给出
- 为什么我不能从用户那里读取值并使其成为常量?
- 打印匹配序列的编号,在用户给定的输入中为常量输入
- 我真的需要为常量对象实现用户提供的构造函数吗?
- GCC C++11 对用户定义的常量和模板参数包的限制
- 用户定义预先声明的全局常量
- 如何通过接受用户输入来设置类的常量成员值
- 要求用户输入常量
- 从常量指针创建用户类的 const 对象
- 常量变量乘以用户输入