`
shi5jin
  • 浏览: 37254 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

如何在类中定义常量?

阅读更多

如果你想得到一个可用于常量表达式中的常量,例如数组大小的定义,那么你有两种选择:

	class X {
static const int c1 = 7;
enum { c2 = 19 };

char v1[c1];
char v2[c2];

// ...
};
一眼望去,c1的定义似乎更加直截了当,但别忘了只有static const的整型或枚举型量才能如此初始化。这就很有局限性,例如:
	class Y {
const int c3 = 7; // error: not static
static int c4 = 7; // error: not const
static const float c5 = 7; // error not integral
};
我还是更喜欢玩“enum戏法”,因为这种定义可移植性好,而且不会引诱我去使用非标准的“类内初始化”扩展语法。

那么,为何要有这些不方便的限制?因为类通常声明在头文件中,而头文件往往被许多单 元所包含。但是,为了避免链接器设计的复杂化,C++要求每个对象都只能被定义一次。如果C++允许类内定义要作为对象被存在内存中的实体,那么这项要求 就无法满足了。关于C++设计时的一些折衷,参见《The Design and Evolution of C++》。

如果这个常量不需要被用于常量表达式,那么你的选择余地就比较大了:

	class Z {
static char* p; // initialize in definition
const int i; // initialize in constructor
public:
Z(int ii) :i(ii) { }
};

char* Z::p = "hello, there";
 
只有当static成员在类外被定义了,你才可以获取它的地址,例如:
	class AE {
// ...
public:
static const int c6 = 7;
static const int c7 = 31;
};

const int AE::c7; // definition

int f()
{
const int* p1 = &AE::c6; // error: c6 not an lvalue
const int* p2 = &AE::c7; // ok
// ...
}
原文地址:http://www.research.att.com/~bs/bs_faq2.html#in-class
分享到:
评论

相关推荐

    C# 定义常量 两种实现方法

    在C#中定义常量的方式有两种,一种叫做静态常量(Compile-time constant),另一种叫做动态常量(Runtime constant)。前者用“const”来定义,后者用“readonly”来定义。 对于静态常量(Compile-time constant),...

    C语言中const定义常量

    本文章是关于C语言中const定义常量 。

    C#箴言:定义常量的两种方法

    在C#中定义常量的方式有两种,一种叫做静态常量(Compile-time constant),另一种叫做动态常量(Runtime constant)。前者用“const”来定义,后者用“readonly”来定义。  对于静态常量(Compile-time ...

    php常量用法类.zip

    主要介绍了php类常量用法,实例分析了php中类常量的概念、特性与相关使用技巧,需要的朋友可以参考下,类常量属于类自身,不属于对象实例,不能通过对象实例访问,子类可以重写父类中的常量,可以通过(parent::)来...

    Excel9 文件 常量定义

    VC操作EXCEL,使用的一些常量定义,方便查找

    静态定义常量

    java 定义静态常量

    在Python中定义一个常量的方法

    今天小编就为大家分享一篇在Python中定义一个常量的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    Vue中定义全局变量与常量的各种方式详解

    本文主要跟大家介绍了关于Vue定义全局变量与常量的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 我想要定义一个变量, 在项目的任何地方都可以访问到, 不需要每一次使用的时候, 都引入...

    JavaConstants:测试Java中常量的各种定义和使用方法

    定义常量的最常见方法是在类中使用public static final 。 然后,可以使用ClassName.CONSTANT_NAME在另一类中使用常量。 通常,通常在Java中至少以大写形式定义常量。 因此,如果我要为Pi(π)的值定义一个常量,...

    TrueStudio for STM32 中常量定位到 Flash 方法

    在truestudio for stm32 IDE开发中如何定义常量到内部flash中。

    C++中的常量定义小结

    本篇笔记总结自一次代码检视。 一般来说,使用C语言编程时我们都习惯在代码当中使用C...之前有所耳闻在C++中应该尽可能少的使用C风格的宏定义,这又是为什么呢? 在查找一些资料之后发现,对于减少C当中的宏定义的主

    EDA/PLD中的在C++中定义常量的两种方法的分析比较

    在C++中,要定义一个常量,有两种主要的做法  1. 符号常量 (#define)  2. 常值变量 (const)  符号常量的定义方式,其实与C++本身没有关系,它是一个编译器指令,或者称为预处理指令(有关的预处理指令还有#...

    java接口中定义的常量的访问方法

    本文为大家介绍一下java接口中定义的常量的访问方法,希望对大家有帮助。

    C51常量 单片机C语言知识点

    c51数据类型是怎么用在常量和变量的定义中的呢?又有什么要注意的吗?

    [C++中】const常量与define宏定义的区别

    较详细地介绍了const常量与宏定义的区别

    在C++中定义常量的两种方法的分析比较

    在C++中,要定义一个常量,有两种主要的做法  1. 符号常量 (#define)  2. 常值变量 (const)  符号常量的定义方式,其实与C++本身没有关系,它是一个编译器指令,或者称为预处理指令(有关的预处理指令还有#...

    ThinkPHP系统常量

    ThinkPHP系统常量,好东西就是拿出来分享。

    详解C++中常量的类型与定义

    常量就像是常规的变量,只不过常量的值在定义后不能进行修改。 整数常量 整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。 整数常量...

    Java 非标准标签库,可直接引用常量定义

    简单使用示例: ${Constants.EXECUTE_STATUS_OK}

    Powershell中定义常量的方法

    主要介绍了Powershell中定义常量的方法,本文讲解了如何在脚本和配置文件中创建常量,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics