现在的位置: 首页 > 综合 > 正文

typedef void (&pF)(int, int);

2013年05月17日 ⁄ 综合 ⁄ 共 1096字 ⁄ 字号 评论关闭

http://zhidao.baidu.com/question/25288575.html 

百度知道的一个问题,偶尔搜到的,感觉不错.

在<<the C++programming language(speical edition)>>中的第七章有外练习叫:
what does the following mean?what would it be good for?
typedef int (&rifii)(int,int);
按我个人理解这应该是一个函数引用,但是我虽然会使用函数指针,但是这个函数引用倒是没有想过,不知C++中有没有这个东东,要是有的话请问该如何初始化?
函数指针可以有函数名初始化,可是这个函数引用要如何初始化呢?
如果没有这个题是什么意思呢?请解惑!谢谢了

问题补充:谢谢你的答案,非常感谢!!!
#include<iostream>
using namespace std;
int gobal;
gobal=10;
void main()
{
cout<<gobal<<endl;
}
error Message:
E:/MyEbook/12/00.cpp(3) : error C2501: 'gobal' : missing storage-class or type specifiers
E:/MyEbook/12/00.cpp(3) : error C2086: 'gobal' : redefinition
你能再告诉我为什么一个全局变量在定义时初始化就可以,而先定义后初始化就不对吗?
最佳答案

#include <stdio.h>

void F(int a, int b){printf("hello %d %d/n", a, b);};

typedef void (&pF)(int, int);

int main()
{
int a = 1, b = 3;
pF x = F;
x(a, b);
printf("0x%X 0x%X", F, x);
}

全局变量是被存储在内存中的全局静态区的, 全局变量的声明总是定义, 因为编译器会将他们的值初始化为其默认值, 可以在全局范围内定义变量, 但不能在全局范围内实施操作, 因为操作是在函数中实现的, 你要分清初始化和赋值的不同, 所以比如有一个全局变量a;

int a; // 等价于int a(int());

则以下对a的操作都是违法的:

++a;
a--;
a += 1;
....

程序是由函数构建的, 而不是文件构建的, 所以以上操作根本执行不到, 所以编译不同过, 而且C/C++编译器貌似只识别全局范围内变量的声明定义, 所以在你试图global = 10的时候它认为你要创建一个不带类型标识符的变量global, 所以给你一个错误; 另外它又发现你企图声明的这个变量与已存在的变量名有冲突, 所以它又给你一个错误...

抱歉!评论已关闭.