引用要声明的同一变量

Referencing the same variable that you're declaring

本文关键字:变量 声明 引用      更新时间:2023-10-16

在处理c++代码时,我看到了以下几次类型错误:

QString str = str.toUpper();

这可能是一个相当容易犯的错误,但它编译和执行(有时会崩溃,有时不会)。我看不出在任何情况下这是你真正想做的事情。

一些测试显示调用了复制构造函数,而不是默认构造函数,并且对象本身是从复制构造函数中给定的。

谁能解释一下为什么这不是一个编译器错误,甚至一个警告?

从技术上讲,对象str是在到达等号时定义的,因此它可以在该点使用。

错误发生在试图用自身初始化对象时,并且允许编译器对此发出警告(如果它能够检测到的话)。但是,由于不是在每种情况下都可以检测,所以不需要编译器。

例如,int x = f(x);是完全正确的,如果int f(const int&)不使用其参数的值。如果编译器还没有看到函数体,它怎么知道呢?

没有错误或警告,因为它相当于:

QString str;
str = str.toUpper();

一样
QString str = "aaa";

相同
QString str;
str = "aaa";
要在同一条语句中做到这一点,你需要使用构造函数,它不会编译:
QString str(str.toUpper());

就像:

QString str("aaa");

不等于

QString str;
str = "aaa";