C++默默编写并调用了哪些函数

什么时候空类不在是一个空类呢?
答案是当C++处理过它之后。

创建了一个类,如果自己没有声明,编译器会为这个类声明一个复制构造函数、一个默认构造函数、一个析构函数和一个赋值函数。所有这些函数都是public且是inline的。

但是对于默认声明的的函数不是每种情况都可以调用的。例如像下面:

template<class T>
class Nmae
{
public:
    Nmae(std::string& m_name, const T& m_data);
    ...
private:
    std::string& name;   //注意是reference
    const T data;   //注意是const
};

//进行如下操作
std::string newdog("shakalaka");
std::string olddog("watanabei");

Name<int> p(newdog, 2);
Nmae<int> s(olddog, 35);

p = s;

赋值之前,无论是p.name还是s.name都指向不同的string对象。如果进行赋值,那么会如何影响p.nmae呢?复制之后p.name会指向s.name所指向的那个string对象吗???也就是说reference自身可以被改动吗?答案肯定是否定的!如果遇到这中情况该如何是好呀?
面对这个难题,C++的态度是拒绝的,不进行哪一行赋值动作。如果你非要编译器指向这种赋值操作的话,那你就只能自己动手了。自己定义赋值操作符,这样编译器将会调用你自己定义的可以进行更改引用和const的赋值操作符。
还有一种情况就是:如果基类将复制操作符声明为private,编译器将拒绝为其派生类生成一个赋值操作符 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值