Type name = name;在c++中非常有用

Is Type name = name; ever useful in C++?

本文关键字:name 非常 有用 c++ Type      更新时间:2023-10-16

c++中允许使用以下代码:

int a = a;

Type name = name;

两者都会导致未初始化的对象被自己初始化,这通常会导致未定义的行为。

这样的代码是需要的还是合理的?这些代码是否有用?

这让我想起了GCC邮件列表的一个旧线程,Gabriel Dos Reis在其中给出了下面的例子来构造一个单节点循环列表:

struct Node {
  Node* link;
  Node(Node& n) : link(&n) { }
};
int main()
{
  Node x = x;
}

允许在变量的初始化项中使用变量名。代码

Type name = name;

可能没有用,但是代码

Type name = f(&name);

在很多地方,语言语法并没有禁止无用的结构。: -)

有时候,如果您有复杂的初始化式,那么您可能不得不引用它。这在构造函数中使用,在初始化列表中传递指向this的指针或引用。

这是有效的,但几乎是不言而喻的

int a = a;

比不

更有害。

至于其他类型,我想说的是,通过重载复制构造函数和使用默认构造函数可以做一些有用的工作。

另一方面,我想不出任何需要这样的代码的情况,因为在我看来,这种语法使代码变得如此复杂,我的主观意见是,没有任何好的理由能够编写这样的赋值。尤其是当考虑到所有可以通过禁止(或至少警告)语法来防止的错误时。

这样的代码永远不可能有用,这会导致不确定性

第一种情况是未定义行为(使用未初始化的self进行初始化),第二种情况也是未定义行为(在未初始化的对象上调用复制构造函数)。