我有一个对矢量作为对象内的字段。所述对象具有一种方法,其中我需要访问向量中的对中的值。我使用迭代器指向我想要访问的向量中的位置。以下是包含向量的代码片段:
在头文件中:
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;
答案 0 :(得分:3)
检查您是否正在调试程序的优化版本 - 在这种情况下,如果编译器可以确定它不需要生成所需的程序输出,则编译器可以自由地删除变量。
但是,即使您使用的是非优化版本,如果您根本不使用该变量,也会发生这种行为。在this bug report on the Express version of VC++ 2010中,您将看到Microsoft代表发表的以下评论(重点已添加):
此问题仅出现在您未使用过的变量上 除了赋值之外的其他方式?变量的存在 .pdb通过十六进制编辑器检查,或看到相应的“mov” 在dissassembly中的指令并不保证编译器 没有做一些阻止调试器的优化程度 检查变量(编译器总是做小的优化 甚至在调试版本中)。调试器只能保证访问a 如果使用变量,编译器将提供变量 申请用于除分配价值之外的其他目的。
如果你有一个使用变量的repro(除了 分配了一个值),你不能在调试器中检查它,请让 我们知道。否则,这是编译器优化的工件。
从您发布的代码中不清楚您是否稍后使用y
的值。
答案 1 :(得分:2)
这与优化有关。由于您没有使用您指定的变量,编译器选择不创建它们(在这种情况下是其中之一)。你使用它们的那一刻(在你的工作示例中,你从它们中减去了一个值),编译器就不能再将它们优化掉了。
我在其他编译器中看到过这种行为,并且总是通过虚假使用消失的变量来解决它。