【发布时间】:2010-05-03 15:31:58
【问题描述】:
类反射 { 上市: 向量 &refv; Refvect(int t, 向量 &refv = vector()) : refv(refv) { }; 无效运算符()() { refv.clear(); } }; 主函数() { 反射 r(0); r(); }
使用 Visual Studio 2010,这给了我一个错误:执行时“向量迭代器不兼容”,但我不明白为什么(但我可以在 refv 中插入元素而没有任何问题)。 临时对象 vector() 和引用一样长,不是吗?
【问题讨论】:
-
请注意,将临时对象绑定到非 const 引用的能力是 VS 扩展,标准只允许将临时对象绑定到 const 引用。
-
@avakar - 大约 12 年来仅“应要求”提供向后兼容性。默认是符合标准的。
-
@Daniel Earwicker,我不知道您所说的“应要求”是什么意思。我刚刚在 vs10 中创建了一个新的空项目,并且无需请求任何内容即可将临时对象绑定到非常量引用。 Visual Studio 实际上的行为方式正好相反——如果需要,您必须请求标准行为 (/Za)。
-
简直不敢相信……怎么还是还是这样?我在 VS 6 中得到的印象是它已被修复(我认为他们必须修复很多自己的库代码,并且当时为此感到自豪)。