如果函数需要返回值,则可以使用()将值进行返回
第1题:
在函数的返回值类型与返回值表达式类型的描述中,错误的是( )。
A.函数返回值的类型是在定义函数时确定的,在函数调用时是不能改变的
B.函数返回值的类型就是返回值表达式的类型
C.函数返回值的类型与返回值类型不同时,函数表达式类型应转换成返回值类型
D.函数返回值的类型决定了返回值表达式的类型
第2题:
将“引用”作为函数返回值类型的格式、好处和需
要遵守的规则?
格式:类型标识符 &函数名(形参列表及类型说明)
{ //函数体}
好处:在内存中不产生被返回值的副本;(注意:
正是因为这点原因,所以返回一个局部变量的引用
是不可取的。因为随着该局部变量生存期的结束,
相应的引用也会失效,产生runtime error!
注意事项:
(1)不能返回局部变量的引用。这条可以参照
Effective C++[1]的Item 31。主要原因是局部变量会
在函数返回后被销毁,因此被返回的引用就成为了
"无所指"的引用,程序会进入未知状态。
(2)不能返回函数内部new 分配的内存的引用。
这条可以参照Effective C++[1]的Item 31。虽然不
存在局部变量的被动销毁问题,可对于这种情况
(返回函数内部new 分配内存的引用),又面临其
它尴尬局面。例如,被函数返回的引用只是作为一
个临时变量出现,而没有被赋予一个实际的变量,
那么这个引用所指向的空间(由new分配)就无法
释放,造成memory leak。
(3)可以返回类成员的引用,但最好是const。这
条原则可以参照Effective C++[1]的Item 30。主要
原因是当对象的属性是与某种业务规则(business
rule)相关联的时候,其赋值常常与某些其它属性
或者对象的状态有关,因此有必要将赋值操作封装
在一个业务规则当中。如果其它对象可以获得该属
性的非常量引用(或指针),那么对该属性的单纯
赋值就会破坏业务规则的完整性。
(4)流操作符重载返回值申明为“引用”的作用:
流操作符<<和>>,这两个操作符常常希望被连续使
用,例如:cout << "hello" << endl; 因此这两个操
作符的返回值应该是一个仍然支持这两个操作符
的流引用。可选的其它方案包括:返回一个流对象
和返回一个流对象指针。但是对于返回一个流对
象,程序必须重新(拷贝)构造一个新的流对象,
也就是说,连续的两个<<操作符实际上是针对不同
对象的!这无法让人接受。对于返回一个流指针则
不能连续使用<<操作符。因此,返回一个流对象引
用是惟一选择。这个唯一选择很关键,它说明了引
用的重要性以及无可替代性,也许这就是C++语言
中引入引用这个概念的原因吧。赋值操作符=。这
个操作符象流操作符一样,是可以连续使用的,例
如:x = j = 10;或者(x=10)=100;赋值操作符的返回值
必须是一个左值,以便可以被继续赋值。因此引用
成了这个操作符的惟一返回值选择。
例3
#i nclude <iostream.h>
int &put(int n);
int vals[10];
int error=-1;
void main()
{
put(0)=10; //以put(0)函数值作为左值,等价于
vals[0]=10;
put(9)=20; //以put(9)函数值作为左值,等价于
vals[9]=20;
cout<<vals[0];
cout<<vals[9];
}
int &put(int n)
{
if (n>=0 && n<=9 ) return vals[n];
else { cout<<"subscript. error"; return error; }
}
(5)在另外的一些操作符中,却千万不能返回引
用:+-*/ 四则运算符。它们不能返回引用,Effective
C++[1]的Item23详细的讨论了这个问题。主要原因
是这四个操作符没有side effect,因此,它们必须构
造一个对象作为返回值,可选的方案包括:返回一
个对象、返回一个局部变量的引用,返回一个new
分配的对象的引用、返回一个静态对象引用。根据
前面提到的引用作为返回值的三个规则,第2、3
两个方案都被否决了。静态对象的引用又因为((a+b)
== (c+d))会永远为true而导致错误。所以可选的只
剩下返回一个对象了。
第3题:
【题目描述】
有关return语句说法不正确的是( )
A)系统默认的返回值类型为整型,故当函数的返回值为int型时,在函数定义时,返回值的类型说明可以省略
B)当函数有返回值时,凡是允许表达式出现的地方,都可以调用该函数
C)当函数没有返回值时,函数的返回值类型可以说明为void型,它表示“无类型”或“空类型”
D)函数的返回值类型必须与return语句中的表达式值的类型一致,但c语言也允许不同;这时,系统以函数定义时的返回值类型说明为准,并自动地将return语句中表达式的值转换为函数的返回值类型
正确答案:D
第4题:
当不需要函数返回任何值时,则需要使用保留字void作为函数的返回值类型。()
A对
B错
第5题:
关于函数的返回值,以下描述中错误的是()
第6题:
如果将一个函数的返回值类型说明为void,则表示()
第7题:
以返回值的角度,函数分为()
第8题:
如果函数没有使用return语句,则函数返回的是?()
第9题:
Inputbox函数的返回值是()类型,Msgbox函数的返回值是() 类型。
第10题:
continue
break
return
exit
第11题:
如果不带返回值,那么只需要return语句本身
如果退出时要带一个返回值,只需要把返回值放到return后面就行了
函数可以随意决定是否带返回值,无需事先定义
return语句的作用是退出当前的函数,回到原先调用它的程序处
第12题:
以函数参数来区分,而不用函数的返回值来区分不同的函数
以函数的返回值来区分,而不用函数参数来区分不同的函数
参数表完全相同而返回值类型不同的两个或多个同名函数
参数表和返回值类型都必须是不同的两个或多个同名函数
第13题:
如果函数没有返回值,对于函数的返回值说明可以是( )。
A.可能没有返回值说明
B.用void说明
C.用const说明
D.返回值可以是任意类型
第14题:
在一个被调用函数中,关于return语句使用描述,( )是正确的。
A.函数返回值的类型是在定义函数时确定,在函数调用时是可能改变的
B.函数返回值的类型就是返回值表达式的值
C.函数返回值的类型决定了返回值表达式的类型
D.函数返回值的类型可以与返回值表达式的类型不一致
第15题:
有关return语句说法不正确的是( )
A)系统默认的返回值类型为整型,故当函数的返回值为int型时,在函数定义时,返回值的类型说明可以省略
B)当函数有返回值时,凡是允许表达式出现的地方,都可以调用该函数
C)当函数没有返回值时,函数的返回值类型可以说明为void型,它表示“无类型”或“空类型”
D)函数的返回值类型必须与return语句中的表达式值的类型一致,但c语言也允许不同;这时,系统以函数定义时的返回值类型说明为准,并自动地将return语句中表达式的值转换为函数的返回值类型
第16题:
程序中对fun函数有如下说明void*fun();此说明的含义是()
第17题:
能否利用返回值对函数进行重载()。
第18题:
如果函数不要求带回值,可用()来定义函数返回值为空
第19题:
以下关于return语句的描述,错误的是()
第20题:
函数LEN(STR(12345678901))的返回值是();函数LEN(DTOC(DATE()))的返回值为()。
第21题:
对
错
第22题:
break
continue
exit
return
第23题:
0
None
任意整数
报错!函数必须要有返回值。
第24题: