gpt4 book ai didi

c++ - static const double/float 在一个类中,好还是不好,请给我一个当前的答案

转载 作者:行者123 更新时间:2023-11-30 02:45:12 26 4
gpt4 key购买 nike

上次对static const int ,const int 和static int 的初始化很疑惑,后来有好心人帮帮我。但是问题又来了,

我试试这些 int C_free 5.0

class Q{

static const double qs = 10;//float is also ok

};

然后我在Qt creator 2.8.1中试了一下,这个不行。

所以为了完全理解这一点,谁能给我一个完整的解释,在什么情况下允许哪种类型?不只是 int 类型。谢谢。

原谅我,初学C++,英语不好

最佳答案

using T = sometype;
class Q
{
static const T qs = somevalue;
};

T必须是整型或枚举类型:

C++11 §9.4.2/3


If a non-volatile const static data member is of integral or enumeration type, its declaration in the class definition can specify a brace-or-equal-initializer in which every initializer-clause that is an assignment-expression is a constant expression.

这里常量表达式的意思本质上是可以在编译时求值;它由 C++11 §5.19/3 定义。


C++11 constexpr 允许范围更广的类型,如果所有相关编译器都支持的话。


一个简单的替代方法是这样做:

class Q
{
static
auto qs() -> double { return somevalue; }
};

还有一个更复杂的替代方案,即模板化 const 技巧:

template< class Dummy_ >
struct Q_constants_
{
static double const qs;
};

template< class Dummy_ >
double Q_constants<Dummy_>::qs = somevalue;

class Q
: public Q_constants_<void>
{};

关于c++ - static const double/float 在一个类中,好还是不好,请给我一个当前的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24708952/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com