1.c语言中printf在不同编译器下面的执行顺序
【代码】:
int n = 0;
printf("%d,%d,%d",++(++n),++(++n),++(++n));
【结果】:
VC6.0下面的结果是:6,5,4 VS2008下面的结果是:6,6,6
【解析】:
(1).在VC6.0下,printf的执行顺序是从右向左,大家如果在调试时将反汇编窗口打开,会见到move ,push等一系列 汇编语言,仔细观察可以看到“%d,%d,%d”这条语句是在最下面,依此可以得出是从右向左的
(2).跟代码执行的优先级有关,首先执行的括号中的代码,3个括号执行完成后n=3,再根据VC6.0下printf的执行顺序得出结果为6,5,4
(3).VS2008下面就没仔细看反汇编了,但是他的执行结果是一样的6,6,6,说明这条语句执行的结果跟编译器相关.
2.如果类中的成员变量分别是const常量类型,&引用类型,static静态成员变量,如何初始化?
【代码】:
class Cpoint
{
private:
const int m_ix;
int &m_iy;
static int m_itotal;
public:
Cpoint(int x=0,int y=0):m_ix(x),m_iy(y)
{
//m_ix=x;//这是错误的初始化,编译器报错
//m_iy=y;
}
};
int Cpoint::m_itotal=0;
【解析】
(1.)const和&的变量只能在初始化列表中初始化。
(2.)static成员变量在类外进行初始化,前面要加类型,域名限定符
3.类的成员函数类型定义为static,如何访问?
【代码】:
class CTotal
{
private:
static int m_iVaule;
public:
CTotal(int x)
{
m_iVaule+=x;
}
static void DisplayValue();
};
void CTotal::DisplayValue()
{
cout<<"调用static静态成员函数"<
【解析】:
(1.)原则上static成员函数,只能访问静态成员变量
(2.)如果要访问对象,则静态成员函数要带类参数
4.const的不同用法
(1.)用const定义类的成员函数,则记得初始化时选用初始化列表
(2.)const 成员函数,此时在该成员函数不能更改参数的数值,且其调用函数也必须是const类型
(3.)const 对象,const CTotal tal(100);此对象只能访问类中的const成员函数.