引用要声明的同一变量
Referencing the same variable that you're declaring
在处理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";
相关文章:
- 在将变量声明为引用时,堆在释放后使用
- 静态变量声明和定义
- 在变量声明中使用 for 循环
- 向量索引变量声明(size_t 或 std::vector<DATATYPE>::size_type)
- C++ 类型类的变量声明不命名类型?
- 将本地 OpenCV Mat 变量声明为静态以防止重新分配
- std::enable_if 更改成员 *变量* 声明/类型
- 在C++中,变量声明左侧的大括号是什么意思?
- 将变量声明为全局变量,然后声明为局部变量 -Shadowing-
- 命名空间内C++变量声明
- 将静态全局变量声明为内联有什么意义吗?
- 如何将一个变量声明为另一个变量的值
- 如何将迭代器变量声明为私有成员变量
- 没有变量声明为函数,但错误:二进制表达式的操作数无效
- 有没有人有书面证据来保证函数中参数的定义方式与普通变量声明相同?
- ClangTool 如何获取变量声明中模板参数的位置?
- 标准与显式自动推导变量声明
- C 静态变量声明怪异链接器错误
- 如何为数组成员变量声明 getter/setter
- 可视C++变量声明