给我一些背景知识。我是一位经验丰富的C#开发人员,他转而使用c ++项目。我在职业生涯早期做了多年的c ++,但是有点生疏......说的话。这是我能够提出来展示我的问题的最简单的例子:
#include <vector>
#include <iostream>
using namespace std;
struct Inner
{
public:
float A;
unsigned short B;
Inner()
:A(0.0F), B(0)
{
}
Inner(const float& valA, const unsigned short& valB)
: A(valA), B(valB){}
};
class Outer
{
private:
const vector<Inner> CollectionOfInner;
public:
Outer(const vector<Inner> initialVal = { Inner(1.0F, 4), Inner(9.0F, 4), Inner(81.0F, 18) })
: CollectionOfInner(initialVal)
{
cout << "Values" << '\n';
for (int i = 0; i < 3; i++)
{
cout << "A: " << CollectionOfInner[i].A << " B: " << CollectionOfInner[i].B << '\n';
}
}
};
int main()
{
Outer test;
}
我的程序只依赖于上面显示的默认参数创建一个Outer的堆栈实例。在调试中,一切都按预期工作,给出以下输出:
Values
A: 1 B: 4
A: 9 B: 4
A: 81 B: 18
Press any key to continue . . .
但是,在Release配置中,只有三个Inner实例中的第一个被正确初始化,输出如下:
Values
A: 1 B: 4
A: 4.59009e-039 B: 4138
A: 2.64788e-038 B: 52345
Press any key to continue . . .
我确定这与发布中启用的某些优化有关...但对于我的生活,我无法想象为什么你会想要这种行为......首先,我认为在我的大型项目中只会出现某种记忆混乱,但一旦我确认了#34; bug&#34;有了像这样简单的污垢项目,我知道一些更基本的事情正在发生。注意:如果我向Outer构造函数提供预先创建的向量,一切都很好。只有在依赖默认构造函数时才会出现此问题。有任何想法吗?另外,作为参考,这是使用标准C ++控制台应用程序项目模板在Visual Studio 2013中完成的。
答案 0 :(得分:1)
共识似乎是Visual Studio 2013中的一个错误。我自己回答这个问题来解决问题。感谢大家!