gpt4 book ai didi

c++ - 为什么类内初始化程序中不允许使用 double

转载 作者:IT老高 更新时间:2023-10-28 23:15:10 29 4
gpt4 key购买 nike

我一直在阅读 Herb Shutter 的“Exceptional C++”,“Item 1 : #define or const and inlining [...]”。

据说类内初始化只允许用于整型(整数、字符、 bool 值)并且只允许用于常量..

我只想知道为什么不能在类声明中初始化 double/float。有什么具体原因吗?

class EngineeringConstants {      // this goes in the class
private: // header file
static const double FUDGE_FACTOR;
...
};
// this goes in the class implementation file
const double EngineeringConstants::FUDGE_FACTOR = 1.35;

我只是想知道为什么下面的声明是不允许的:

class EngineeringConstants {      // this goes in the class
private: // header file
static const double FUDGE_FACTOR = 1.35;
...
};

?

最佳答案

此语句已过时:在 C++03 中,不支持在类定义中使用 double 进行初始化。在 C++ 中(从 2011 修订版开始),您可以在类定义中初始化任意成员。此外,初始化不限于 static 成员,您还可以初始化非static 成员:

struct foo {
static constexpr double value = 1.23;
std::string str = "foo";
};

在 C++03 中禁止使用 float 初始化 static 成员的历史原因是编译期间的数字可能与执行期间的数字不同。例如,当在使用 IEEE float 的平台上进行交叉编译并针对使用 IBM 十六进制 float 的平台进行编译时,即使对于可在两种数值系统中表示的常量,也会产生不同的结果。

关于c++ - 为什么类内初始化程序中不允许使用 double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19068905/

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