无法访问对向量中的值

时间:2012-04-18 18:48:30

标签: c++ vector std-pair

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

在头文件中:

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;

2 个答案:

答案 0 :(得分:3)

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

但是,即使您使用的是非优化版本,如果您根本不使用该变量,也会发生这种行为。在this bug report on the Express version of VC++ 2010中,您将看到Microsoft代表发表的以下评论(重点已添加):

  

此问题仅出现在您未使用过的变量上   除了赋值之外的其他方式?变量的存在   .pdb通过十六进制编辑器检查,或看到相应的“mov”   在dissassembly中的指令并不保证编译器   没有做一些阻止调试器的优化程度   检查变量(编译器总是做小的优化   甚至在调试版本中)。调试器只能保证访问a   如果使用变量,编译器将提供变量   申请用于除分配价值之外的其他目的。

     

如果你有一个使用变量的repro(除了   分配了一个值),你不能在调试器中检查它,请让   我们知道。否则,这是编译器优化的工件。

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

答案 1 :(得分:2)

这与优化有关。由于您没有使用您指定的变量,编译器选择不创建它们(在这种情况下是其中之一)。你使用它们的那一刻(在你的工作示例中,你从它们中减去了一个值),编译器就不能再将它们优化掉了。

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