zoukankan      html  css  js  c++  java
  • 【effective c++读书笔记】【第0章】导读

    1、 所谓声明式(declaration)是告诉编译器某个东西的名称和类型,但略去细节。所谓定义式(definition)是提供编译器一些声明式所遗漏的细节。对对象而言,定义式是编译器为此对象拨发内存的地点。对function或function template而言,定义式提供了代码本体。对class或class template而言,定义式列出它们的成员。

     //声明式
    extern int x;
    std::size_t numDigits(int number);
    class Widget;
    template<typename T>
    class GraphNode;
    
    //定义式
    int x;
    std::size_t numDigits(int number){
    	std::size_t digitsSoFar = 1;
    	while ((number /= 10) != 0) ++digitsSoFar;
    	return digitsSoFar;
    }
    class Widget{
    public:
    	Widget();
    	~Widget();
    	...
    };
    template<typename T>
    class GraphNode{
    public:
    	GraphNode();
    	~GraphNode();
    	...
    };
    

    2、所谓default构造函数是一个可被调用而不带任何实参者。这样的构造函数要不没有参数,要不就是每个参数都有缺省值。构造函数被声明为explicit,可阻止它们被用来执行隐式类型转换,但仍可被用来进行显示类型转换。

    class A{
    public:
    	A();//default构造函数
    };
    class B{
    public:
    	explicit B(int x = 0, bool b = true); //default构造函数
    };
    

    3、copy构造和copy赋值很容易区别。如果一个新对象被定义,一定会有个构造函数被调用,不可能调用赋值操作。如果没有新对象被定义,就不会有构造函数被调用,那么当然就是赋值操作被调用。pass-by-value意味着“调用copy构造函数”。

    class Widget{
    public:
    	Widget();
    	Widget(const Widget& rhs);
    	Widget& operator=(const Widget& rhs);
    	...
    };
    Widget w1;//调用default构造函数
    Widget w2(w1);//调用copy构造函数
    w1 = w2; //调用copy赋值操作符
    

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    哎~水题,还是最小生成树。没想到一遍AC了...
    博客搬家咯~
    又遇到一个奇葩问题....输出double用%f...
    又想吐槽一下了...同样是DP,差别咋就那么大呢?
    1487: 未覆盖顶点数量.
    并查集~
    侃项目管理 序
    安装Redis报错jemalloc/jemalloc.h: No such file or directory
    PyCharm设置pip国内源(镜像)
    HBase元数据及损坏文件的修复
  • 原文地址:https://www.cnblogs.com/ruan875417/p/4785450.html
Copyright © 2011-2022 走看看