c++ - C++ 常量静态 char* 数组
问题描述
编辑:请注意,如@ThomasMatthews 回答中所述,最好不要将数据放在标题中。请参考他的回答。
我想在类的头文件中创建一个静态 const char* const 数组。例如:const static char* ar[3] = {"asdf","qwer","ghjk"};
但是我得到一个错误。
这是一个例子:
#include <iostream>
class test{
static const char* const ar[3] = {"asdf","qwer","hjkl"};
}
int main(){}
这是错误:
static data member of type 'const char *const [3] must be initialized out of line
我想知道我正在尝试做的事情是否可行。我已经阅读了在类定义中定义静态 const 整数成员,我从中得到的印象是你只能用 int 来做到这一点。如果这是相关的,我使用的是 mac,我的 g++ 版本如下:
Apple LLVM version 9.1.0 (clang-902.0.39.1)
Target: x86_64-apple-darwin17.5.0
Thread model: posix
解决方案
需要为静态类成员提供单独的线外定义(带有初始化程序)的原因在于,C++ 中的确切定义点会影响初始化顺序和导出符号在目标文件中的位置。该语言希望您自己做出这些决定。
inline
但是,为了在您不关心这些东西的常见情况下简化事情,从 C++17 开始,您可以通过在静态成员声明中指定显式关键字来做您想做的事
class test{
static inline const char* const ar[] = { "asdf", "qwer", "hjkl" };
};
推荐阅读
- loops - 试图抓取到下一个网页
- angular - Angular 应用程序对于手机来说太大了吗?
- http - http保持活动特性是否违反了三个经验法则:异步,反应式编程和可伸缩性
- android - 如何观察发出回调请求的 ViewModel
- javascript - 键盘事件未按角度分派 Enter 键事件
- typescript - 递归/层次变换
- sql - 如何在Node.js中获取两个表数据,其中对象位于另一个对象中
- amazon-web-services - Dynamo AWS 表不允许我取消选中 DynamoDB JSON 以查看纯 JSON 中的对象
- azure - Azure 应用服务计划 - 分钟/天是什么意思?
- jquery - 捕捉到可滚动网站内容的“不可滚动”100vh 部分