最后一次提问,最后一次散分
//希望lanfengjiyue(一心想做程序员的歪脚鸭)就指责我和
//papaya_stone(^_^)shentong(^_^)倒分一事向我道歉
//第一帖答案
//原题请见 http://www.csdn.net/Expert/TopicView1.asp?id=997412
//下面的程序在vc下可以正确编译并运行,说明在vc下并非所有引用型
//变量都必须在定义时赋初值 程序由Tommy提供 Tommy还证明在Dev C++下没有此问题
void func1()
{
printf("func1\n");
}
void func2()
{
printf("func2\n");
}
int main( int argc, char* argv[] )
{
typedef void FuncType();
FuncType &rf;
// rf(); // 这里会有访问错
rf=func1;
rf(); // OK! print "func1"
rf=func2;
rf(); // OK! print "func2"
return 0;
}
//发生上面情况的原因
//其实这里有一个二义性问题,如果允许一个数据引用
//动态改变所引用的对象的话, 请看下面的代码
int a = 10, b = 20;
int& c = a;
c = b; //二义性,这一句之后c肯定应该是20,但a应该是什么呢?
//所以,数据引用必须在定义是初始化,且终生不能改变
//但对于函数引用则不会有这个问题,因为无论如何,那一句之后c都应该
//代表b, 而对a没有任何影响. 所以函数引用可以这样做
今天散分到此结束,共5帖831分,午后结帖,过时不侯