-
尽量使用const,enum,inline替换 #define
因为,#define 替换发生在预处理阶段,编译器对这个替换内容就缺少了类型检测,并且不利于错误信息的查看 -
编译器再声明数组时必须知道数组的大小,而不是使用一个变量,我便有了如下测试
- 枚举类型做数组大小(在类中做成员)
class GamePlayer {
private:
enum { NumTurns = 5 } ;
int scores[NumTurns];
};
可行,编译器看到的
class GamePlayer
{
private:
enum
{
NumTurns = static_cast<unsigned int>(5)
};
int scores[5]; //这里发生了替换
};
- 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];
};
- 枚举类型做数组大小(函数中)
void func()
{
enum { NumTurns = 5 } ;
int scores[NumTurns];
}
可行,编译器看到的
void func()
{
enum
{
NumTurns = static_cast<unsigned int>(5)
};
int scores[5];
}
当然类的成员函数中也是一样可行的
- 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