无法计算“监视”窗口中使用重载运算符的表达式
Unable to evaluate expressions with overloaded operator in Watch window
我在这里看到了几个与这个问题有关的问题。但他们似乎都讨论了一些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 Window
中显示以下错误:
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 的调试器表达式不支持重载运算符。请参阅 MSDN 上的此页面。
调试器不支持同时具有 const 和非 const 版本的重载运算符。标准模板库中经常使用具有 const 和非 const 版本的重载运算符。
相关文章:
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 重载运算符new[]的行为取决于析构函数
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- 在 myVector 类中重载运算符 + 时出错
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 如何在 cpp 中重载运算符 +=?
- C++ 如何重载 [] 运算符并进行函数调用
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- 重载运算符有地址吗?
- 如何迭代重载运算符 [] 的类?
- 重载运算符与添加问题
- 模板基类中的重载运算符
- 如何调用用于重载运算符"<<"的 friend 函数?
- 在 C++17 中的命名空间和子命名空间中重载运算符是不明确的
- 重载运算符<<采用谷歌 C++ 风格
- C++ 如何正确重载 + 运算符
- cout (<<) 重载运算符不打印减去的矩阵
- 如何在 c++ 中重载运算符 + 以便能够 whrite c_str = "smth" + c_str;
- 重载运算符*以获取对另一个类的实例的引用