• 构造函数返回值


    2.构造函数的功能主要用于在类的对象创建时定义初始化的状态.它没有返回值,也不能用void来修饰.

    这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择(深表怀疑).而其他方法都有返回值.即使是void返回值,尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全的。

    构造函数是没有返回值的,即使使用void也不可以;但是在一个类中可以使用返回值为void,名称为类名的函数。

    假设构造函数可以有返回值,
    那么我们必须要考虑程序员可能在构造函数中返回*this
    但是,遗憾的构造函数执行结束并不意味着整个对象都完成了定义和分配,
    编译器内部可能还有些工作要做
    所以允许构造函数返回*this将带来巨大的隐患,
    所以C++缔造者索性放弃了构造函数的返回问题

    既然没有返回值,那为什么不将constructor定义为 void 类型。原因就是Bjarne博士将 constructor 定位为一个特殊的"函数",它没有名字,无法取函数地址,只能由系统调用,用户无法手动调用(别拿vc说事儿,那根本不符合标准)。  如果constructor被定义成void类型的,那不就变成一个普通函数了吗,普通函数你凭什么不允许我手动调用? Bjarne 为了更好的突出 constructor 的特殊性,所以规定 constructor 没有返回类型,即使是void也不行----constructor并不是真正意义上的“函数”,所以你无法手动调用。

    构造函数是返回该类的实例,可以把这个类的实例当为构造函数的返回值,因为构造函数的返回值类型总是当前类,因此无须定义返回值类型。

    http://blog.csdn.net/wudishine/article/details/7285951

    个人理解:如果有返回类型会造成混乱。一种是返回类型不当,如果返回的是地址,还有一块返回值的话会造成在内存中分配两块指针。存在对象销毁的问题,指向同一个对象。如果有返回值,不论是何值,我们调用一次构造函数创建一个对象就可以用对象再次调用构造函数,因为其已经变成一个普通函数了。我们用到的只是临时对象的指针实例。防止恶意问题的出现。

    语法上没有,底层可能有,但是编译器不通过。new 会创建一个对象,并且返回对象的地址,也可以认为是引用。这不是返回值,而是new关键字本来的功能。构造函数让其有特殊性,避免与普通函数的灵活性出现问题。

    http://blog.csdn.net/qychjj/article/details/4901181

    方法的灵活性和构造函数的固定性之间的协调,避免灵活性带来的问题。

    http://blog.csdn.net/qychjj/article/details/4901181

  • 相关阅读:
    Mono项目将继续推动基于Linux的开发
    VS.PHP 在Visual Studio 下的 PHP 开发 IDE 工具
    SQL Server 2008 的代码提示功能
    想做的时候没有机会了
    我的最爱
    双缓冲
    做个好男人!
    再见了,曾经喜欢过的歌手
    看看他是喜欢你还是爱你的~~~
    独家:未来五年程序员应当具备的十项技能
  • 原文地址:https://www.cnblogs.com/LiloT/p/3276874.html
Copyright © 2020-2023  润新知