剖析C++中的常量表达式与省略号的相关作用

2020-01-06 14:22:09于海丽
易采站长站为您分析C++中的常量表达式与省略号的相关作用,以及表达式中的可变参数模板示例,需要的朋友可以参考下  

C++ 常量表达式
常量值是指不会更改的值。C + + 提供了两个关键字,它们使你能够表达不打算修改对象的意图,还可让你实现该意图。
C++ 需要常量表达式(计算结果为常量的表达式)以便声明:

  • 数组边界
  • case 语句中的选择器
  • 位域长度规范
  • 枚举初始值设定项

    常量表达式中合法的唯一操作数是:

    • 文本
    • 枚举常量
    • 声明为使用常量表达式初始化的常量的值
    • sizeof 表达式

      必须将非整型常量(显式或隐式)转换为常量表达式中合法的整型。因此,以下代码是合法的:

      
      const double Size = 11.0;
      char chArray[(int)Size];
      

      到整型的显式转换在常量表达式中是合法的;所有其他类型和派生类型是非法的(在用作 sizeof 运算符的操作数时除外)。
      逗号运算符和赋值运算符不能用于常量表达式。

      省略号和可变参数模板
      省略号在 C 和 C++ 中具有许多用途。这些包括函数的变量参数列表。C 运行库的 printf() 函数是一种最常见的示例。
      variadic 模板是支持任意数量的参数的类或函数模板。此机制对 C++ 库开发人员尤其有用,因为您可以将其应用于类模板和函数模板,从而提供一系列类型安全和重要功能以及灵活性。
      语法
      可变参数模板用两种方法使用省略号。参数名称的左侧表示参数包,参数名称的右侧将参数包扩展为单独的名称。
      以下是可变参数模板类定义语法的基本示例:

      
      template<typename... Arguments> class classname;
      

      如以下示例所示,对于参数装箱和展开,可以根据您的喜好在省略号周围添加空白,例如:

      
      template<typename ...Arguments> class classname;