c++11 编译期常量定义

在c++11之前,在类中定义编译期常量的方法:

template<typename Type>
struct Size
{
    static const int x = 1;
};

template<typename Type>
struct Size
{
    enum{ x = 1, y = 2 };
};

在c++11中定义编译期常量,无须定义static const或enum类型,只需从std::integral_constant派生

template<typename Type>
struct Size : std::integral_constant<int, 1>
{

};

根据Size::value获取常量1

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中的常量指的是不可变的值,它们可以用于各种目的,例如防止意外的值改变、提高代码的可读性和维护性等等。C++中有多种类型的常量,包括字面常量、const常量、constexpr常量和枚举常量等等。 1. 字面常量 字面常量是一种最简单的常量类型,它们是直接出现在程序中的数值或字符串。例如,以下是一些常见的字面常量: - 整数常量:42、-3、0、123456789等等。 - 浮点数常量:3.14、-2.718、0.0、1.0e-6等等。 - 字符常量:'a'、'B'、'1'、'\n'等等。 - 字符串常量:"hello"、"world"、""、"12345"等等。 注意,字面常量是不能被修改的,因为它们在编译时就已经确定了。如果你试图修改字面常量的值,编译器会报错。 2. const常量 const常量是一种在程序运行时不能被修改的值,它们可以用于任何可以使用变量的地方。const常量定义方式为: ``` const <type> <name> = <value>; ``` 其中,`<type>`表示常量的类型,`<name>`表示常量的名称,`<value>`表示常量的值。例如,以下是一些const常量定义: ``` const int MAX_SIZE = 100; const double PI = 3.1415926; const char* MESSAGE = "Hello, world!"; ``` 需要注意的是,const常量一旦被定义就不能被修改,否则编译器会报错。 3. constexpr常量 constexpr常量是一种在编译就可以计算出来的常量,它们可以用于需要常量表达式的任何地方。constexpr常量定义方式为: ``` constexpr <type> <name> = <value>; ``` 其中,`<type>`表示常量的类型,`<name>`表示常量的名称,`<value>`表示常量的值。例如,以下是一些constexpr常量定义: ``` constexpr int MAX(int a, int b) { return a > b ? a : b; } constexpr double PI = 3.1415926; ``` 需要注意的是,constexpr常量必须在编译就能够计算出来,因此它们的值必须是一个常量表达式。如果你试图定义一个非法的constexpr常量编译器会报错。 4. 枚举常量 枚举常量是一种将一组常量打包在一起的方式,它们可以用于代替一组具有相同含义的整数常量。枚举常量定义方式为: ``` enum <name> { <value1>, <value2>, ... }; ``` 其中,`<name>`表示枚举类型的名称,`<value1>`、`<value2>`等等表示枚举常量的名称和值。例如,以下是一个枚举类型的定义: ``` enum Color { RED = 0xFF0000, GREEN = 0x00FF00, BLUE = 0x0000FF }; ``` 需要注意的是,枚举常量的值可以是任何整数类型,包括char、short、int和long等等。如果你试图定义一个重复的枚举常量编译器会报错。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值