首页 > 其他分享 >effective-c 条款2理解与思考

effective-c 条款2理解与思考

时间:2023-01-23 13:11:59浏览次数:40  
标签:const effective int 编译器 NumTurns 思考 scores static 条款

  • 尽量使用const,enum,inline替换 #define
    因为,#define 替换发生在预处理阶段,编译器对这个替换内容就缺少了类型检测,并且不利于错误信息的查看

  • 编译器再声明数组时必须知道数组的大小,而不是使用一个变量,我便有了如下测试

  1. 枚举类型做数组大小(在类中做成员)
class GamePlayer { 
private: 
enum { NumTurns = 5 } ; 
int scores[NumTurns]; 
};

可行,编译器看到的

class GamePlayer
  {
    
    private: 
    enum 
    {
      NumTurns = static_cast<unsigned int>(5)
    };
    
    int scores[5];  //这里发生了替换
  };
  1. const类型做数组大小(在类中做成员)
class GamePlayer { 
private: 
const int NumTurns = 5;
int arr[NumTurns];   
//error: invalid use of non-static data member 'NumTurns'
//错误不会发生替换
};

将变量变为static时就可以通过编译了

class GamePlayer {
private: 
static const int NumTurns = 5;
int arr[NumTurns]; 
};

可行,编译器看到的

class GamePlayer
{
  private: 
  static const int NumTurns = 5;
  int arr[5];
};
  1. 枚举类型做数组大小(函数中)
void func()
{
enum { NumTurns = 5 } ; 
int scores[NumTurns]; 
} 

可行,编译器看到的

void func()
{
  enum 
  {
    NumTurns = static_cast<unsigned int>(5)
  };
  
  int scores[5];
}

当然类的成员函数中也是一样可行的

  1. const类型做数组大小(在函数中)
void func()
{
const int NumTurns =5;
int scores[NumTurns]; 
} 

可行,编译器看到的

void func()
{
  const int NumTurns = 5;
  int scores[5];
}

经过验证在类的成员函数中也是一样可行的

标签:const,effective,int,编译器,NumTurns,思考,scores,static,条款
From: https://www.cnblogs.com/zyx-c/p/17065120.html

相关文章

  • 哲学思考:谋略和道术
    哲学思考:谋略和道术    谋略的分为五个层次:新手、入门、高手、大师,零级。 新手。骗,瞎编事实(虚构事实)。核实事件,即可揭穿。谋略难成;谋士,不可逃脱。 ......
  • 哲学思考:个人发展的思考
    哲学思考:个人发展的思考    个人应该以提升个人实力为核心,辅之以人际关系。实力,主宰人生的核心力量。人际关系,是放大“实力”的工具。人际关系,执行“共赢”理......
  • 【纯感性】【无数学公式】关于状态估计的总结和一点思考
    推导的几种方法贝叶斯推断根据贝叶斯推断可以直接求出后验概率且贝叶斯推断的分母一般可以忽略或者涵盖在了分子前的系数那里联合高斯概率密度对于一对服从多元正态......
  • 【开发思考】约束是在数据库中定义还是在业务层中实现?
    [1]现状  首先,数据库的约束有:  ·主键​​primarykey​​​  ·外键​​foreignkey​​  ·非空​​notnull​​  ·默认​​default​​  ·唯......
  • 【MySQL思考】触发器是否应该在生产环境中使用?
    [1]触发器简单介绍  MySQL触发器​​trigger​​​是一种存储程序,它和一个指定的表相关联,当该表中的数据发生变化(增加、更新、删除)时自动执行。这些修改数据行的操作......
  • effective modern c++ - 1 理解模板类别推导
    模板中的行参类型推断会省略引用在这两种模板中,行参的引用都会在推断过程中被省略template<typenameT>//templateAvoidf(T&param);template<typenameT>//temp......
  • 服务器Raid配置的一些思考
    背景随着公司软件的发展.客户越来越多.测试环境和兼容环境也越来越多.不管是虚拟化,还是裸金属做数据库存储都是绕不开的一道门槛.最近又上架了几台服务器,所以想趁......
  • 杂想闲思录——关于小孩教育的思考
    关于中国的教育,其实有很多这方面分析的文章,下面是我自己的一些思考和体会,如有不对的地方,欢迎讨论和纠正。中国教育的模式基本上是参考、照搬前苏联的教育模式,而前苏联的教......
  • 开源动物行为分析实验箱(斯金纳箱)特色解析及试用条款
    前言 斯金纳箱作为一个研究动物神经和行为的工具,扮演着越来越重要的角色。团队在帮一些科研机构研发了一款产品这样的产品。在此基础上,把该产品形成了标准化的产品。并......
  • Effective C++ 笔记
    EffectiveC++笔记Sec0Introduction本书的目的:如何有效运用C++,使软件易理解、易维护、可移植、可扩充、高效、并有预期行为提出的忠告分两类:一般性的设计策略,带有......