昨天看到一个提问帖子问到一个有关构造函数的问题,问题意思如下:

定义一个class Cat,然后创建实例,发现Cat frisky和Cat frisky()两种方式表现不一。

我用vs调试了一下

#include <iostream>class Cat{
public:Cat(){std::cout << "default-constructor" << std::endl;}Cat(int i){std::cout << "new-constructor" << std::endl;}void operator ()(){std::cout << "operator-void" << std::endl;}void operator ()(int i){std::cout << "operator-int" << std::endl;}~Cat(){std::cout << "destructor" << std::endl;}
};void test()
{Cat();     // "default-constructor destructor"Cat(1);        // "new-constructor destructor"Cat a;     // "default-constructor"a();      // "operator-void"a(1);       // "operator-int"Cat b(); // * do nothingCat c(1);    // "new-constructor"c();      // "operator-void"c(1);       // "operator-int"Cat d = Cat(); // 同 ad();d(1);Cat e = Cat(1); // 同 ce();e(1);
}int main(int argc, char **argv)
{test();return 0;
}

发现"Cat b();"这一句压根就没走到,单步调试直接跳过了,感觉是被编译器干掉了。难道是C++允许这种写法,但却又是无效的代码,与其这样,为什么不直接在编译期间就报错呢?具体原因我也说不上来,希望有个明白人解释一下。

C++类的构造函数及操作符()重载相关推荐

  1. C#构造函数、操作符重载以及自定义类型转换

    构造器 构造器(构造函数)是将类型的实例初始化的特殊方法.构造器可分为实例构造器和类型构造器,本节将详细介绍有关内容. 实例构造器 顾名思义,实例构造器的作用就是对类型的实例进行初始化.如果类没有显示 ...

  2. 类与对象:类的6个默认成员函数: 构造函数、析构函数、拷贝构造函数、赋值操作符重载、默认拷贝构造与赋值运算符重载的问题、const成员函数、 取地址及const取地址操作符重载

    1.类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类.任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数. 构造函数 析构函数 拷贝构造函数 赋值操作符重载 const成员函数 ...

  3. C/C++ 之 操作符重载

    1.成员函数重载操作符:除".","*","::","?:"外其他操作符都可重载 (1) a.双目操作符声明格式: cl ...

  4. C++基础11-类和对象之操作符重载1

    总结: 1.运算符重载的本质是函数重载 2.运算符重载可分为成员函数重载和全局函数重载(差一个参数) 3.运算符重载函数的参数至少有一个是类对象(或类对象的引用) 4.不可以被重载的操作符有:成员选择 ...

  5. C#中如何利用操作符重载和转换操作符

    操作符重载 有的编程语言允许一个类型定义操作符应该如何操作类型的实例,比如string类型和int类型都重载了(==)和(+)等操作符,当编译器发现两个int类型的实例使用+操作符的时候,编译器会生成 ...

  6. C++——构造函数(拷贝构造,拷贝复制),析构函数,操作符重载

    C++--构造函数(拷贝构造,拷贝复制),析构函数,操作符重载 构造函数与析构函数:: 涉及构造函数还可以看这篇文章C++搞懂深拷贝初始化=与赋值=的区别 1.声明和定义构造函数和析构函数 构造函数在 ...

  7. C++ 类和对象(二):构造函数、析构函数、拷贝构造函数、运算符重载

    构造函数 析构函数 拷贝构造函数 运算符重载 class Date {}; 可以看到,上面那个类没有任何成员,是一个空类,但是它真的什么都没有吗?其实一个类在我们不写的情况下,都会生成6个默认的成员函 ...

  8. 拷贝构造函数、析构函数、赋值操作符重载、取地址操作符重载和const修饰的取地址操作符重载...

    2019独角兽企业重金招聘Python工程师标准>>> 在我们学习C++的过程中,我们难免会遇到类,在类中有6个默认的函数,它们分别为:构造函数.拷贝构造函数.析构函数.赋值操作符重 ...

  9. c++操作符重载,拷贝构造函数和友…

    操作符重载 把c++的操作符在自己的新函数中重新实现就是操作符重载. 可以在类里面以成员函数的方式重载某个操作符,也可以在某个名字空间中重载操作符. ------------------------- ...

  10. 【C/C++学院】(8)全局函数和类成员函数转化/友元/操作符重载

    1.全局函数和类成员函数转化 全局函数和成员函数的相互转化:只需要修改一个指向本类的this指针: #include <iostream> using namespace std;clas ...

最新文章

  1. python使用os和shutil模块进行文件创建,删除,移动,复制,重命名
  2. nginx反向代理tomcat
  3. 记一次 .NET 医院CIS系统 内存溢出分析
  4. 【Day12】整个前端性能提升大致分几类
  5. Electron 遭封杀,Web 开发者在苹果平台上举步维艰!
  6. badboy + jmeter并发性能测试
  7. Arp病毒专杀工具下载及其防治解决方案
  8. 快速求实对称矩阵特征向量的技巧
  9. IDEA修改Jsp模板
  10. Verilog 任意分频器设计
  11. java中的打印_java中使用打印的方法
  12. 标题中冒号的用法_英文中冒号的各种用法
  13. 解决​excel里一复制就卡死的经验分享【转】
  14. 有关git commit --amend的用法及若干个问题
  15. loj10099 矿场搭建
  16. 关于通过邮箱找回密码的实现
  17. 前端开发人员的精彩文字
  18. html5个人影集,全屏的个人影集展示网页模板
  19. 工信部、公安部、交通部:拟将自动驾驶汽车道路测试及示范应用范围拓宽至高速公路...
  20. 机房温度可视化:物联网下的数据中心环境运维新方式

热门文章

  1. 纯真IP库详解(转)
  2. java aspect demo_Spring AOP + Aspect 实现切面编程
  3. 软件著作权申请流程和注意事项
  4. ubuntu系统清理垃圾
  5. 如何设置电脑桌面动态壁纸
  6. plc梯形图转c语言,plc梯形图转换成stl程序的实例教程
  7. 几何公差基础知识之圆柱度
  8. 如何在海量元素中(例如 10 亿无序、不定长、不重复)快速判断一个元素是否存在?
  9. matlab实现色彩迁移,图像的色彩风格迁移
  10. http响应报文,如果响应的内容比较大,客户端怎么样判断接收完了呢?