mirror of
https://github.com/CnTransGroup/EffectiveModernCppChinese.git
synced 2025-03-03 22:00:26 +08:00
Update item8.md (#148)
Missing * Co-authored-by: yekunxu <130904770+yekunxu@users.noreply.github.com>
This commit is contained in:
parent
d2f59cdcd4
commit
c70044e107
@ -110,7 +110,7 @@ auto result3 = lockAndCall(f3, f3m, nullptr); //没问题
|
||||
|
||||
第二个使用`NULL`调用的分析也是一样的。当`NULL`被传递给`lockAndCall`,形参`ptr`被推导为整型(译注:由于依赖于具体实现所以不一定是整数类型,所以用整型泛指`int`,`long`等类型),然后当`ptr`——一个`int`或者类似`int`的类型——传递给`f2`的时候就会出现类型错误,`f2`期待的是`std::unique_ptr<Widget>`。
|
||||
|
||||
然而,使用`nullptr`是调用没什么问题。当`nullptr`传给`lockAndCall`时,`ptr`被推导为`std::nullptr_t`。当`ptr`被传递给`f3`的时候,隐式转换使`std::nullptr_t`转换为`Widget`,因为`std::nullptr_t`可以隐式转换为任何指针类型。
|
||||
然而,使用`nullptr`是调用没什么问题。当`nullptr`传给`lockAndCall`时,`ptr`被推导为`std::nullptr_t`。当`ptr`被传递给`f3`的时候,隐式转换使`std::nullptr_t`转换为`Widget*`,因为`std::nullptr_t`可以隐式转换为任何指针类型。
|
||||
|
||||
|
||||
模板类型推导将`0`和`NULL`推导为一个错误的类型(即它们的实际类型,而不是作为空指针的隐含意义),这就导致在当你想要一个空指针时,它们的替代品`nullptr`很吸引人。使用`nullptr`,模板不会有什么特殊的转换。另外,使用`nullptr`不会让你受到同重载决议特殊对待`0`和`NULL`一样的待遇。当你想用一个空指针,使用`nullptr`,不用`0`或者`NULL`。
|
||||
|
Loading…
Reference in New Issue
Block a user