mirror of
https://github.com/CnTransGroup/EffectiveModernCppChinese.git
synced 2025-03-04 06:10:25 +08:00
fix
This commit is contained in:
parent
9dcc2f55d5
commit
0bc5ef3b26
@ -1,4 +1,4 @@
|
||||
## Ite 17:理解特殊成员函数函数的生成
|
||||
## Ite 17:理解特殊成员函数的生成
|
||||
条款 17:理解特殊成员函数函数的生成
|
||||
|
||||
在C++术语中,特殊成员函数是指C++自己生成的函数。C++98有四个:默认构造函数函数,析构函数,拷贝构造函数,拷贝赋值运算符。这些函数仅在需要的时候才生成,比如某个代码使用它们但是它们没有在类中声明。默认构造函数仅在类完全没有构造函数的时候才生成。(防止编译器为某个类生成构造函数,但是你希望那个构造函数有参数)生成的特殊成员函数是隐式public且inline,除非该类是继承自某个具有虚函数的类,否则生成的析构函数是非虚的。
|
||||
|
@ -6,8 +6,8 @@
|
||||
应该在创建对象时用{}而不是()吗?为什么alias声明比typedef好?constexpr和const有什么不同?常量成员函数和线程安全有什么关系?这个列表越列越多。
|
||||
这章将会逐个回答这些问题。
|
||||
|
||||
## Item 5:Distinguish between () and {} when creating objects
|
||||
条款五:区别使用()和{}创建对象
|
||||
## Item 7:Distinguish between () and {} when creating objects
|
||||
条款七:区别使用()和{}创建对象
|
||||
|
||||
从不同的角度看,C++11初始化对象的语法选择既丰富得让人尴尬又混乱得让人糊涂。一般来说,初始化值要用()或者{}括起来或者放到"="的右边:
|
||||
````cpp
|
||||
@ -159,7 +159,7 @@ public:
|
||||
…
|
||||
};
|
||||
Widget w{10, 5.0}; //错误!要求变窄转换
|
||||
````
|
||||
````
|
||||
这里,编译器会直接忽略前面两个构造函数,然后尝试调用第三个构造函数,也即是std::initializer_list构造函数。
|
||||
调用这个函数将会把`int(10)`和double(5.0)`转换为bool,由于括号初始化拒绝变窄转换,所以这个调用无效,代码无法通过编译。
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user