【发布时间】:2019-12-11 13:00:56
【问题描述】:
我已经更改了问题的标题和正文,看看是否更适合:)。
我在cppreference: unique_ptr/reset 上阅读了成员函数签名。
void reset( pointer ptr = pointer() ) noexcept;
而pointer是unique_ptr的成员类型,documented为
pointer|std::remove_reference<Deleter>::type::pointer如果该类型存在,否则T*。必须满足NullablePointer
我在 cmets 中学到了什么:
-
pointer ptr = pointer()在某种程度上等同于例如int,using pointer = int*; pointer ptr = pointer() - 如果它是像
int这样的内置类型,那么ptr是一个零初始化 变量。我在这里得到一个带有0/NULL/nullptr的int*指针。 -
using pointer = int*; pointer ptr = pointer()没有“原始”声明,即int* ptr = int*()不起作用。
我还阅读了Do built-in types have default constructors? ,这很有帮助。
我想了解更多关于这种行为的信息(可以以自定义类的方式构造内置类型),如果可以更详细地解释的话:
using pointer = int*; pointer ptr = pointer()
这个语句真的没有“原始”语法吗?我曾经认为所有使用typedef 或using 的东西都可以用“原始”版本写下来。就像一对一的映射。
【问题讨论】:
-
期待空指针。
-
@Evg 为什么?如何? ... 问答
-
@Evg:该声明(部分原因可能是其年代久远)混淆了默认初始化和值初始化,
T()就是这样做的。 -
@Evg:
(int*){}是复合文字;那些存在于 C 但不存在于 C++ 中。
标签: c++