【问题标题】:Implicitly convert to reference隐式转换为参考
【发布时间】:2015-07-20 11:08:52
【问题描述】:

我有:

struct vec {
    __m128 m128;
    inline vec(__m128 m128) : m128(m128) {
    }
}

所以现在__m128 可以隐式转换为vec,但是当我使用它时,如:

void doStuff(vec &v) { *stuff be doing* }
doStuff( _mm_set1_ps(1.0f)); //mm_set_ps returns __m128

我收到一条错误消息:

无法从 __m128 转换为 &vec

那么问题是什么以及如何解决?

【问题讨论】:

  • 你不能把一个非常量的引用作为一个临时的。

标签: c++


【解决方案1】:

doStuff 接受对非常量 vec 的引用。非常量引用不能像函数调用的结果那样绑定到右值。

如果您需要在doStuff 中修改v,则将_mm_set1_ps(1.0f) 的结果存储在中间变量中,然后调用:

vec v = _mm_set1_ps(1.0f);
doStuff(v);

如果您不需要修改v,请将doStuff 更改为通过reference-to-const 获取其参数:

void doStuff(const vec &v) { /*stuff doing*/ }

【讨论】:

  • 为什么需要引用 const?
  • @Ragdoll 对 const 的引用可能会绑定到右值
  • @Ragdoll 因为理论上,你不应该修改临时文件:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-16
相关资源
最近更新 更多