C++中成员函数形参类型和全局类型相冲突时的情况分析

C++中成员函数形参类型和全局类型相冲突时的情况分析,第1张

假定有如下的代码,请问此时两个ss函数的形参或者返回类型中,t1究竟是什么类型呢?是int类型还是double类型?


测试代码1:
#include
using namespace std;
typedef int t1;
class A
{
public:
    void ss(t1 val){_val=val;cout<

运行结果以及分析:


那么从上述的运行结果中,我们可以看到第一个ss函数的形参所占内存大小为4bytes,故形参类型为int,为全局中定义的类型。


但是从上述的代码中我们是不能判断出第二个ss函数的形参是什么类型的,因此我们改进了测试代码。



测试代码2::
#include
using namespace std;
typedef int t1;
class A
{
public:
    void ss(double val){_val=val;cout<
运行结果以及分析


从上面的运行结果中,我们可以看到此时的类成员变量_val的值为3.2,但是第二个ss函数却返回了3,故此时我们可以得到:第二个函数的返回类型为int,为全局中定义的类型。


进一步的思考与分析

到了这里,我们可能会问,如果在函数体中定义了一个t1类型的变量,它的类型到底是int还是double呢,于是博主给出以下的测试代码:

#include
using namespace std;
typedef int t1;
class A
{
public:
    void ss(){t1 f=3.2;cout<

运行结果为:

故此时我们可以清晰的看到:若在函数体内定义了某个t1类型的变量,则该变量的类型为double。


总结以及理论分析

对于类中成员函数的函数体的分析,会直到整个类的声明都出现了才开始。


而对于成员函数的形参列表和返回类型来说,还是会在编译器第一次遭遇时给出适当的决议(在该例中被决议为全局变量的类型)。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/634929.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-16
下一篇 2022-04-16

发表评论

登录后才能评论

评论列表(0条)