为什么调试器总是跳过此程序中的一行?

Why does the debugger always skip one line in this program?

本文关键字:一行 程序 调试器 为什么      更新时间:2023-10-16

我正在编写一个名为Matrix的矩阵的模板类,我像这样重写默认构造函数:

template<typename _Tp, size_t m, size_t n> inline
Matrix<_Tp, m, n>::Matrix()
{
for(size_t i = 0; i != m*n; ++i) val[i] = _Tp(0);
}

在我的测试文件中,我写了这个:

SC::Matrix<double, 3, 3> Mat();

当我构建程序时,所有这些都很好。但是当我运行测试程序时,我总是得到错误的结果。

当我试图找到原因时,我发现调试器总是跳过Mat的定义;起初我认为可能是因为我在构建此程序后修改了文件,所以我删除了所有构建结果(由 cmake 自动生成(并重建它。但没用,问题仍然存在。

有人可以帮助我找到原因吗?我是否为此问题提供了足够的信息?

你说"...调试器总是跳过...",所以我假设,您尝试创建一个类型为SC::Matrix<double, 3, 3>的变量 Mat 并查看它是如何默认初始化的。

如果这是真的,那么

SC::Matrix<double, 3, 3> Mat();

声明一个名为Mat的函数,该函数不带参数并返回SC::Matrix<double, 3, 3>。当然,您不能"调试"函数声明。 如果要创建默认的初始化变量,请写入:

SC::Matrix<double, 3, 3> Mat{};

或者只是

SC::Matrix<double, 3, 3> Mat;