gpt4 book ai didi

c++ - 为什么不允许使用静态 const float ?

转载 作者:IT老高 更新时间:2023-10-28 13:21:25 27 4
gpt4 key购买 nike

我有一个类,它本质上只是包含一堆通过我的应用程序使用的常量定义。出于某种原因,longs 编译但 floats 不编译:

class MY_CONSTS
{
public :
static const long LONG_CONST = 1; // Compiles
static const float FLOAT_CONST = 0.001f; // C2864
};

给出以下错误:

1>c:\projects\myproject\Constant_definitions.h(71) : error C2864: 'MY_CONSTS::FLOAT_CONST' : only static const integral data members can be initialized within a class

我错过了什么吗?

最佳答案

回答您提出的实际问题:“因为标准是这样说的”。

只有静态、常量、整数类型的变量(包括枚举)可以在类声明中初始化。如果编译器支持 float 的内联初始化,则它是一个扩展。正如其他人指出的那样,处理静态、常量、非整数变量的方法是在类的相应源文件(而不是头文件)中定义和初始化它们。

C++ 标准第 9.2 节“类成员”第 4 项:

A member-declarator can contain a constant-initializer only if it declares a static member (9.4) of const integral or const enumeration type, see 9.4.2.

第 9.4.2 节“静态数据成员”第 2 项:

If a static data member is of const integral or const enumeration type, its declaration in the class definition can specify a constant-initializer which shall be an integral constant expression (5.19). In that case, the member can appear in integral constant expressions. The member shall still be defined in a namespace scope if it is used in the program and the namespace scope definition shall not contain an initializer.

关于c++ - 为什么不允许使用静态 const float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2454019/

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