gpt4 book ai didi

c++ - 像自定义类一样构造的指针(内置类型)如何工作?

转载 作者:行者123 更新时间:2023-12-01 14:23:23 25 4
gpt4 key购买 nike

我已经更改了问题标题和正文,看看它是否更适合 :)。


我在 cppreference: unique_ptr/reset 上阅读了一个成员函数签名.

void reset( pointer ptr = pointer() ) noexcept;

pointerunique_ptr 的成员类型, documented作为

pointer | std::remove_reference<Deleter>::type::pointer if that type exists, otherwise T*. Must satisfy NullablePointer

我在评论中学到了什么:

  1. pointer ptr = pointer()在某种程度上相当于例如int , using pointer = int*; pointer ptr = pointer()
  2. 如果它是内置类型,如 int , 然后 ptr是一个零初始化变量。我得到一个int*带有 0/NULL/nullptr 的指针在这里。
  3. using pointer = int*; pointer ptr = pointer() 没有“原始”语句,也就是int* ptr = int*()行不通。

我还读了Do built-in types have default constructors?这很有帮助。


我想更多地了解这种行为(内置类型可以用自定义类的方式构造),如果可以更详细地解释的话:

using pointer = int*; pointer ptr = pointer()

这句话真的没有“原始”语法吗?我曾经认为一切都使用 typedefusing可以用“原始”版本写下来。就像一对一的映射。

最佳答案

不需要您所说的“原始”语法,因为指针可以用 0 初始化为零。

int *p = 0; // nullptr

我猜它可能对模板参数推导有用,但我们已经有了一个语法:(int*)0。确实不需要为像这样的小东西添加更多语法(或者可能有人忘记添加它;但不管怎样,现在都没有必要了)。

T(...) 语法主要用于初始化用户定义类型的对象。

I used to think that everything use a typedef or using could be written down with a "raw" version.

这是另一个例子:

int a;
a.~int(); // syntax error

using Int = int;
a.~Int(); // ok!

第一个语句是不允许的,因为它是空操作。第二个不是因为在一般上下文中它可能会做一些事情(销毁对象)而不是空操作。由于语言不想对此进行不必要的限制,因此允许使用别名。

出于同样的原因,即使您无法写出语法,也允许使用 pointer():如果不允许,那么在通用上下文中工作会很痛苦。

关于c++ - 像自定义类一样构造的指针(内置类型)如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59286430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com