首页 > 试题广场 >

内联函数在编译时是否做参数类型检查?

[单选题]
内联函数在编译时是否做参数类型检查?
  • 不做检查,和宏一样
  • 做类型检查
  • 和编译器相关
推荐
做类型检查,因为内联函数就是在程序编译时,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体来代替。
编辑于 2015-02-02 15:45:24 回复(0)
先说宏和函数的区别:
1. 宏做的是简单的字符串替换(注意是字符串的替换,不是其他类型参数的替换),而函数的参数的传递,参数是有数据类型的,可以是各种各样的类型.
2. 宏的参数替换是不经计算而直接处理的,而函数调用是将实参的值传递给形参,既然说是值,自然是计算得来的.
3. 宏在编译之前进行,即先用宏体替换宏名,然后再编译的,而函数显然是编译之后,在执行时,才调用的.因此,宏占用的是编译的时间,而函数占用的是执行时的时间.
4. 宏的参数是不占内存空间的,因为只是做字符串的替换,而函数调用时的参数传递则是具体变量之间的信息传递,形参作为函数的局部变量,显然是占用内存的.
5. 函数的调用是需要付出一定的时空开销的,因为系统在调用函数时,要保留现场,然后转入被调用函数去执行,调用完,再返回主调函数,此时再恢复现场,这些操作,显然在宏中是没有的.
内联函数与宏的区别:
1.内联函数在运行时可调试,而宏定义不可以;
2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会; 
3.内联函数可以访问类的成员变量,宏定义则不能; 
4.在类中声明同时定义的成员函数,自动转化为内联函数。
发表于 2015-09-15 15:18:45 回复(1)
%%头像 %%
做类型检查,不然c++primer怎么说尽量用const,inline来替换define
发表于 2018-09-18 11:05:34 回复(0)
B . 内联函数是C++新增的特性.在C语言中是使用#define来做宏定义----这也是内联代码的原始实现..而宏定义一般就是文本替换,不做参数类型检查,但是内联函数是需要进行检查的.而且 宏不能按值传递,内联函数是按值传递的
发表于 2015-04-13 19:33:25 回复(1)
内联函数在编译时会进行参数类型检查。内联函数是在调用点展开的,相当于将函数体直接插入到调用处。因此,编译器会对内联函数的参数进行类型检查,确保调用时传递的参数类型与函数声明中的参数类型匹配。

如果调用内联函数时传递的参数类型与函数声明中的参数类型不匹配,编译器会发出错误或警告。这与普通函数的参数类型检查类似。因此,在使用内联函数时,仍然需要注意参数类型的正确性,以避免出现类型错误导致的问题。

需要注意的是,内联函数的展开是由编译器决定的,它并不一定会真正地内联展开函数体。编译器可能会选择不展开内联函数,而是生成对应的函数调用。这通常是由于内联函数体过于庞大,无法有效地插入到调用点,或者编译器认为展开的效果不明显。因此,内联函数是否真正展开是由编译器决定的,但参数类型检查仍然会在编译时进行。
发表于 2023-10-31 14:00:12 回复(0)
内联函数与宏的区别:
1.内联函数在运行时可调试,而宏定义不可以;
2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会; 
3.内联函数可以访问类的成员变量,宏定义则不能; 
4.在类中声明同时定义的成员函数,自动转化为内联函数。
发表于 2021-07-05 17:36:05 回复(0)

内联函数为了继承宏函数的效率,没有函数调用时开销,然后又可以像普通函数那样,可以进行参数,返回值类型的安全检查,又可以作为成员函数。

发表于 2019-08-07 10:49:59 回复(0)
简单点说,宏在编译之前对字符串直接进行替换,而函数是在开始编译后做参数类型检查的,所以和宏不一样。
发表于 2019-03-20 20:43:51 回复(0)
引用。 1.内联函数在运行时可调试,而宏定义不可以; 2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会;  3.内联函数可以访问类的成员变量,宏定义则不能;  !重要! 4.在类中声明同时定义的成员函数,自动转化为内联函数。
发表于 2018-10-29 17:10:38 回复(0)