string &retLocal()这个里面的加了这个&和不加有什么区别吗?
我怎么感觉没区别
另外,retLocal这个函数不应该没有返回值吗?
string &retRef是一个局部变量的引用,按理而言,引用出了retLocal这个函数传到主函数后,应该就没有值了呀?
还有为什么我没有#include 也可以使用string ?
string &retLocal()这个里面的加了这个&和不加有什么区别吗?
我怎么感觉没区别
另外,retLocal这个函数不应该没有返回值吗?
string &retRef是一个局部变量的引用,按理而言,引用出了retLocal这个函数传到主函数后,应该就没有值了呀?
还有为什么我没有#include 也可以使用string ?
先看个例子然后再针对你提问的问题细说:
你提问的问题:
(1)函数类型后面带&,表示返回的是一个引用,不带&表示返回的是一个值。
带&的时候,函数再返回时,返回的就是函数内的同一个变量!!!(记住这句话)。
不带&的时候,函数返回时,回对返回值进行一次复制,如果返回的是一块大内存,不带引用回降低程序的效率。
所以,带不带&实际上区别很大。
(2)string &retRef是一个局部变量的引用,按理而言,引用出了retLocal这个函数传到主函数后,应该就没有值了.
你的这句,理解是对的,跟我(1)中让记住的那句话是一个道理。
所以,出了函数后,实际上retRef已经被回收了,在你的代码中能够正常显示,是因为分配给retRef变量的内存还没有被其它变量占用,所以能输出。你再对比我上面的贴图,我贴图中返回的是一个数组,再main函数中打印数组的时候,跟fun函数中的值就完全不一致!!
(3)因为iostram库中引用了string类型,所以,包含了iostream后,能够使用string类型定义变量,但是,iostream中没有strlen()、strcpy()等这些函数,如果需要使用这些函数,则需要包含string头文件