Type name = name;在c++中非常有用
Is Type name = name; ever useful in C++?
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进行初始化),第二种情况也是未定义行为(在未初始化的对象上调用复制构造函数)。
相关文章:
- OpenGL大的3D纹理(>2GB)非常慢
- 为什么需要复制构造函数,在哪些情况下它们非常有用
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- 为什么std::互斥需要很长的、非常不规则的时间来共享
- C++中"dependent name"的定义是什么?
- G++ C++17 类模板参数推导在非常特殊的情况下不起作用
- 使用浮点数和双精度数的非常小数字的数学
- 在打开多个其他窗口时使用全屏窗口时帧速率非常低
- 将系数存储在头文件的数组中("does not name a type"错误)
- 我从int x[3]得到的一个非常奇怪的输出;
- 反向迭代器在C++中非常奇怪的行为
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- C++初学者:为什么我的编译器根据我的循环返回"name not found"?
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- 将非常大的 int 转换为双倍,在某些计算机上会损失精度
- 我的自定义使用 std::unordered_map 的性能非常慢
- ifstream 尝试读取 9 到 13 之间的无符号字符时非常奇怪的行为
- 如何解决"'mutex' in namespace 'std' does not name a type"?
- 在 C++ 中使用命名空间时出现"does not name a type"错误
- Type name = name;在c++中非常有用