这些签名之间有什么区别?
T * f(T & identifier);
T & f(T & identifier);
T f(T & identifier);
void f(T * identifier);
void f(T & identifier);
void f(T identifier);
我在c中遇到了指针,但功能签名中的amperstand对我来说是新的。任何人都能解释一下吗?
答案 0 :(得分:3)
类型声明中的&符号表示引用类型。
int i = 4;
int& refi = i; // reference to i
int* ptri = &i; // pointer to i
refi = 6; // modifies original 'i', no explicit dereferencing necessary
*ptri = 6; // modifies through the pointer
引用与指针有许多相似之处,但如果不需要地址算法,它们更容易使用且不易出错。此外,与指针不同,引用在初始化后不能反弹到“指向”另一个对象。只需要谷歌搜索引用与C ++中的指针。
答案 1 :(得分:1)
T * f(T & identifier);
这是一个引用T并返回指向T的函数的函数。
T & f(T & identifier);
这是一个函数,它引用T并返回对T的引用。
T f(T & identifier);
这个引用了一个T并返回一个T的副本。
void f(T * identifier);
这个指针指向T并且不返回任何内容。
void f(T & identifier);
这个引用了一个T并且什么也没有返回。
void f(T identifier);
这个采用T值(副本)并且不返回任何内容。
引用的行为几乎与指针完全相同,只是引用永远不会被设置为NULL,并且隐式创建引用并取消引用,因此在调用函数或函数内部时不需要处理指针语法