C++包含四个次语言:C语言 泛型编程 STL 面向对象编程
class GamePlayer {
private:
static const int NumTurns = 5; // 常量声明式
//类成员保证常量至多一份实体
int scores[NumTurns]; // 使用该常量
};
// 注意:由于class常量已在声明时获得初值(设初值为5),因此定义时不可以再设初值
const int GamePlayer::NumTurns; // NumTurns的定义
void f(int) {}
#define CALL_WITH_MAX(a, b) f((a) > (b) ? (a) : (b)) // 不推荐 宏函数
//宏
template<typename T>
inline void callWithMax(const T& a, const T& b) // 推荐
{
f(a > b ? a : b);//三元运算符
}
int test_item_2()
{
#define ASPECT_RATIO 1.653 // 不推荐
const double AspectRatio = 1.653; // 推荐 const 不可修改的常量
{const char* const authorName = "Scott Meyers";} // 推荐
const std::string autorName("Scott Meyers"); // 更推荐
//constant pointers
return 0;
}
请记住:(1). 对于单纯常量,最好以const对象或enum替换#define;(2). 对于形式函数的宏(macro),最好改用inline函数替换#define。
enum {NumTurns = 5};
//枚举
char greeting[] = "Hello";
{char* p = greeting;} // non-const pointer, non-const data
{const char* p = greeting;} // non-const pointer, const data
{char* const p = greeting;} // const pointer, non-const data
{const char* const p = greeting;} //const pointer, const data
std::vector<int> vec(1);
const std::vector<int>::iterator iter = vec.begin(); // iter的作用像个T* const
//chost T*const iter const iter no_const date
*iter = 10; // 没问题,改变iter所指物 迭代器不能动 内容数据可以动
//++iter; // 错误,iter是const
std::vector<int>::const_iterator cIter = vec.begin(); // cIter的作用像个const T*
//*cIter = 10; // 错误,*cIter是const
//data can`t change
++cIter; // 没问题,改变cIter
如果关键字const出现在星号左边,表示被指物是常量;如果出现在星号右边,表示指针自身是常量;如果出现在星号两边,表示被指物和指针两者都是常量.
STL迭代器系以指针为根据塑模出来,所以迭代器的作用就像个T指针。声明迭代器为const就像声明指针为const一样(即声明一个T* const指针)