gpt4 book ai didi

c++ - 无法在 Watch 窗口中计算具有重载运算符的表达式

转载 作者:太空狗 更新时间:2023-10-29 23:17:12 26 4
gpt4 key购买 nike

我在这里看到了几个与此问题相关的问题。但他们似乎都在讨论解决此问题的一些 STL 特定技巧。这是问题的一个简单示例。假设我们使用一个类,它重载了一些运算符,比如 std::vector 重载 [] 运算符:

vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);

auto x = v[0];

当尝试计算调用重载运算符的表达式时,v[0] 在这种情况下,VC++ 在 Watch 窗口 中显示以下错误:

v[0] no operator "[]" matches these operands    

我的第一个猜测是调试器无法确定参数的类型,所以我尝试评估 v[(size_type)0] 表达式,然后是这个 ((intvector)v) [(size_type)0] 表达式,对代码进行以下修改:

typedef vector<int> intvector;
intvector v;

运气不好。我再次收到相同的错误消息。

这很奇怪,因为当我使用运算符调用的扩展(不确定这里的术语是否正确)形式时,它起作用了:v.operator[](0)。它似乎普遍适用,不仅适用于 STL 类,而且适用于我自己的重载 [] 运算符的类。

在我的理解中,v[0]v.operator[](0) 这两种形式应该是等价的,但 VC++ 似乎有不同的想法。他们真的不同吗?为什么 VC++ 调试器不能评估短格式,但对“扩展”格式没有问题?有没有办法解决?我非常习惯只复制一小段代码并在 Watch Window 中对其进行评估。

最佳答案

如果有 const 和非 const 版本可用,Visual Studio 的调试器表达式不支持重载运算符。看这个page on MSDN .

The debugger does not support overloaded operators with both const and non-const versions. Overloaded operators with const and non-const versions are used frequently in the Standard Template Library.

关于c++ - 无法在 Watch 窗口中计算具有重载运算符的表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19459719/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com