【问题标题】:Declare and initialize constant in header file在头文件中声明和初始化常量
【发布时间】:2012-06-26 23:44:52
【问题描述】:

我精通以下典型范例:

//.h
extern const int myInt;

//.c, .m, .cpp, what have you
const int myInt = 55;

但必须有一种方法可以将其放入 .h 文件中,以便与无法访问实现文件的库或其他实例一起使用。

例如,我正在尝试将 NSString 常量添加到 Xcode 项目中的 .h 文件中,如下所示:

static NSString *const myString = @"my_string";

但是,当我尝试使用 myString 时,我得到了错误

Initializer 元素不是编译时常量

myString 上,表示它没有被正确实例化。如何在 C++ 或 Objecitve-C 头文件中声明编译时常量?

【问题讨论】:

  • 那么这意味着是 C 还是 C++?您可以在 C++ 中使用运行时表达式初始化全局变量,但在 C 中则不行。
  • 很高兴知道 C 不可能。将更新标签。

标签: c++ objective-c constants header-files compile-time-constant


【解决方案1】:

在 C++ 中,const 对象具有内部链接,除非显式声明 extern,因此将定义放入头文件中没有问题,例如:

const int myInt = 55;

有了这个定义和第一个声明,myInt 可以用作整数常量表达式,例如用于数组边界等。

我无法回答 Objective C。

【讨论】:

  • @Vorac:这在 g++ 中确实有效(假设您实际上正在编译 C++ 源代码)。您的编辑使我浪费时间重新验证已经正确的内容,并且使该答案在内部不一致。为什么我要对示例说“const 对象具有内部链接”,然后是 explicit static?如果您不确定某事,请发表评论;不要编辑。我已回滚您的编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-05
  • 2011-01-08
相关资源
最近更新 更多