如果遇到下面的函数调用,您的第一反应返回值也是一个函数的实现:
static markOop prototype(){
return markOop( no_hash_in_place | no_lock_in_place );
}
那么您的想法错了,markOop不是一个函数,而是一个指针。no_hash_in_place | no_lock_in_place就是为markOop赋的初值。
在C语言中,对于变量初始化,有一种快速赋初值的写法:
int x=3;
可以直接写成
int x(3);
同样,指针类型也是基本类型,自然也支持快速赋初值的写法
int x=3;
int *p=&x;
可以直接写成
int x=3;
int *p(&x);
下面给出个详细的例子:
include <stdio.h>
class A
{
public:
enum{
a=1,
b=2
};
};
typedef class A* AT;
AT test(){
return AT(3);//给指针赋初值
}
int main(){
printf("yy=%p\n",test());
}
C++编译器在解释test()函数时,会将语法最终展开为下面这种形式:
A* test(){
A* a=(A*)3;
return a;
}