gpt4 book ai didi

c++ - 使用 static const + const 作为数组绑定(bind)

转载 作者:IT老高 更新时间:2023-10-28 22:59:30 27 4
gpt4 key购买 nike

我正在做这样的事情

类.hpp:

 class Class {

private:
static const unsigned int arraySize;
int ar[arraySize+2];
};

类.cpp:

#include <Class.hpp>
const unsigned int arraySize = 384;

编译器(q++,基于 g++ 的 QNX 操作系统的 c++ 编译器)给了我 error: array bound is not an integer constant在编译包含 Class.hpp 的单元时(不是在编译 Class.cpp 时)。

为什么这不起作用?我知道静态 const 成员可以用作数组绑定(bind),由 C++ 标准保证(参见 this anwser )。但是为什么编译器看不到 static const + const 的结果?作为常数?

最佳答案

这是应该被编译器接受的好代码:

class Class { 
const static int arraySize = 384;
int ar[arraySize+2];
};

如果不是,则说明您的编译器已损坏。

但是,如果您将实际常量从头文件移出到选定的翻译单元,这会使代码无效。

// Class.h
class Class {
const static int arraySize;
int ar[arraySize+2]; // ERROR
};

// Class.cpp
const int Class::arraySize = 384;

这是因为您的 Class 对象的大小无法在编译时仅根据 header 中可用的数据来确定。这不是完全正确的原因,但沿着这些思路进行推理有助于理解诸如此类的编译错误。

为避免出现此类错误,您可以将 static const int 替换为 enum,例如

class Class { 
enum { arraySize = 384 };
int ar[arraySize+2];
};

关于c++ - 使用 static const + const 作为数组绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8938574/

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