我有一个需要静态const变量成员的类。该类的值将在运行时由用户输入知道。我已经阅读了很多帖子,但到目前为止,没有一个解决方案有效。我知道这篇文章:
Can I initialize a static const member at run-time in C++?
包含一个解决方法,但它使用了我想避免的全局变量。而且它并没有真正解决问题。
考虑一下:
#include
class A {
friend void foo(int);
static int dummy;
public:
static const int &T;
};
const int &A::T = A::dummy;
int A::dummy = 0;
void foo(int val) { A::dummy = val; }
int main() {
foo(10);
std::cout << A::T << std::endl;
foo(12);
std::cout << A::T << std::endl;
}
程序将在控制台中编译和编写10和12。这违背了const限定词的目的。这里的const是引用而不是值。所以我得出的结论是,在执行时不可能有一个静态的const类变量!
我知道另一种涉及创建设置类类的方法,但它不是很整洁。
因此,如果有人知道一个简单的解决方案,请告诉我们!
答案 0 :(得分:0)
如果您不喜欢全局变量,可以执行以下方案:
class A {
friend void foo(int);
static int dummy;
public:
static const int &T;
};
const int &A::T = A::dummy;
int A::dummy = 0;
void foo(int val) { A::dummy = val; }
int main() {
foo(10);
std::cout << A::T << std::endl;
}
这是在您的类中将辅助static int
变量声明为私有。让朋友成为改变帮助者价值的功能。
如果只想将辅助函数更改为:
,则只需初始化它void foo(int val) {
static int count = 0;
if(!count) A::dummy = val;
++count;
}
或者,如果您不喜欢全局函数,可以将foo
成员函数static
上面显示的A
函数设置如下:
class A {
static int dummy;
public:
static const int &T;
static void foo(int val) { A::dummy = val; }
};
const int &A::T = A::dummy;
int A::dummy = 0;
int main() {
A::foo(10);
std::cout << A::T << std::endl;
}
答案 1 :(得分:0)
我在原始问题的链接和我得到的其他解决方案中提供的解决方案也存在问题。考虑一下: 的#include
class A {
friend void foo(int);
static int dummy;
public:
static const int &T;
};
const int &A::T = A::dummy;
int A::dummy = 0;
void foo(int val) { A::dummy = val; }
int main() {
foo(10);
std::cout << A::T << std::endl;
foo(12);
std::cout << A::T << std::endl;
}
程序将在控制台中编译和编写10和12。这违背了const限定词的目的。这里的const是引用而不是值。所以我得出的结论是,在执行时不可能有一个静态的const类变量!