难以访问对向量中的值

Trouble accessing value in a vector of pairs

本文关键字:向量 访问      更新时间:2023-10-16

我有一个对向量作为对象内部的字段。所述对象有一个方法,我需要在其中访问向量中成对的值。我正在使用迭代器指向我希望访问的向量中的位置。以下是包含向量的代码片段:

在头文件中:

vector<pair<double, double> > points;
vector<pair<double, double> >::iterator headingTo;

在构造函数中:

 points.push_back(make_pair(1700.00, 3300.00));//Plus 20 or so other values
 headingTo = points.begin();

在方法中:

double x = headingTo->first - positionX;
double y = headingTo->second - positionY;

但是,当我运行此代码时,未创建 y。当我使用断点查看变量时,它根本不显示在Visual Studio中。但是,如果我交换线条,y 是可访问的,x 不是。 有什么想法吗?

编辑:我发现了以下作品:

double headingToX = headingTo->first; 
headingToX -= positionX;
double headingToY = headingTo->second;
headingToY-= positionY;

检查您是否没有调试程序的优化版本 - 在这种情况下,如果编译器可以确定不需要变量生成程序所需的输出,则可以自由地删除变量。

但是,即使您使用的是未优化的构建,如果您根本不使用该变量,也可能发生这种行为。在 VC++ 2010 Express 版本的此错误报告中,您将看到Microsoft代表的以下评论(着重号已添加):

此问题是否仅发生在您未在任何变量中使用的变量上 除了赋值之外的方式?变量在 .pdb通过十六进制编辑器进行检查,或查看相应的"mov" 反汇编中的指令不保证编译器 没有进行某种级别的优化,以防止调试器 检查变量(编译器总是进行小的优化 即使在调试版本中)。调试器只能保证访问 如果变量用于 用于分配值以外的其他目的的应用程序。

如果您有正在使用变量的重现(除了 分配了一个值),并且您无法在调试器中检查它,请让 我们知道。否则,这是编译器优化的工件。

从您发布的代码中不清楚您以后是否使用 y 的值。

它与优化有关。由于您没有使用分配给的变量,因此编译器选择不创建它们(在本例中为其中一个)。当你使用它们的那一刻(在你的工作示例中,你从每个例子中减去一个值),编译器就无法再优化它们了。

我在其他编译器中看到过这种行为,并且总是通过虚拟使用消失的变量来解决它。