Effective C++学习

xsl-blogs / 2024-09-26 / 原文

导读

声明式

extern int x;

std::size_t numDigits(int num);

class Person;

template<typename T>
class GraphNode;

签名式

std::size_t (int); //这个函数获得一个int,返回一个size_t

定义式

int x;

std::size_t numDigits(int num)
{
    std::size_t digitSoFar = 1;
	while((num/10) != 0)  ++digitSoFar;
	return digitSoFar;
}

class Person{
public:
    Person();
	~Person();
};

template<typename T>
class GraphNode{
public:
    GraphNode();
	~GraphNode();
};

初始化(通常由构造函数执行,所谓默认构造函数就是可以被调用但不含实参者)

class A{
public:
    A();
};
------------------------------------------------------------------------
class B{
public:
    explicit B(int x = 0; bool y = true); //explicit阻止隐式类型转换,但仍可被显式类型转换
};
------------------------------------------------------------------------
class C{
public:
    explicit C(int x); //这个就不是default默认构造函数
};
------------------------------------------------------------------------
class D{
public:
    D();                     //默认构造函数
	D(const D& d)         //拷贝构造
	D& operator=(const D& d)//拷贝赋值构造
}

D d1;             //默认
D d2(d1);         //拷贝
d1 = d2;         //拷贝赋值
D d3 = d1;       //拷贝!!!! 区别就在于,新创建的d3是拷贝,已经存在的是拷贝赋值

class作为入参的时候,尽量不要值传递(本质上会用拷贝构造),用引用传递

条款01 视c++为一个语言联邦