本文主要是介绍=default和=delete之二,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
c++ primer 5th上在讲到=default和=delete时,都是说的函数声明,不便于理解。可以按下面理解,认为编译器在=default和=delete出现的地方自动换为函数定义。
=default:
1,只能对编译器可以合成的默认构造函数或拷贝控制成员使用=default。
2,在声明时加上关键字=default。但是在编译代码时,显式让编译器在default关键字出现的地方生成合成的函数定义。
因此不能再自己定义,否则会出现重复定义错误。
(1) 若在类内声明时指定default,则是内联的; 若在外部声明时指定,则是非内联的。
因此c++ primer 5th P237“=default 既可以和声明一起出现在类的内部,也可以作为定义出现在类的外部”在理解上需要注意,在外部类定义外部是编译器把=default关键字换为函数的定义。
1, 只在类定义时声明为default. 编译器会在此进行定义函数。此时是内联的.
class base {
public:base() = default;
private:int a;
};2, 在类定义时声明非default,在类定义外声明为default,编译器会在此进行定义函数. 此时不是内联.
class base {
public:base(); //首次声明
private:int a;
};
// ok. 编译器会在此进行定义
这篇关于=default和=delete之二的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!