use*_*462 3 c++ gdb copy-constructor
我很好奇我在这段代码中发生的事情几乎是错误地写的:
#include <iostream>
class Test
{
public:
Test() {
std::cout << "Default constructor";
a= 10;
}
int a;
};
int main() {
Test obj(obj);
std::cout << obj.a << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
它在gcc中编译而没有任何警告(使用-Wall -Werror).执行它只打印垃圾.
如果我没有弄错的话,这就是调用隐式的拷贝构造函数,而不是初始化.我很好奇复制构造函数在这种情况下会做什么,但gdb不会在该行中停止(设置为该行的断点跳转到下一行).
如果将"复杂"属性添加到类中(例如a std::string),一切都会中断,可能是因为'='运算符如何为这些类重载.
我的假设是否正确?为什么gdb不会停在该行?为什么在使用未初始化的对象调用复制构造函数时没有警告?
由于您有一个类型的成员变量int,其不确定值被复制到自身,因此代码在技术上是未定义的行为.
然而,在实践中,使用当前的计算机不会发生任何坏事.但在第三方面,也没有任何好处发生.
关于警告,这是一个执行质量问题.C++标准没有什么可说的.
| 归档时间: |
|
| 查看次数: |
154 次 |
| 最近记录: |