jep*_*ugs 0 c++ rvalue rvalue-reference c++11
我想知道有一个方法返回一个r值.具体来说,我想知道是否有办法用重载运算符来做到这一点.我有这个代码:
struct vec4 {
float x;
float y;
float z;
float w;
...
inline float operator [] (int i)
{
switch (i) {
case 0:
return this->x;
case 1:
return this->y;
case 2:
return this->z;
case 3:
return this->w;
default:
exit(1);
return 0;
}
}
};
Run Code Online (Sandbox Code Playgroud)
我怎样才能改变这一点,以便我可以使用某些东西来达到效果
vec4 v;
...
v[2] = 5.0f;
Run Code Online (Sandbox Code Playgroud)
我听说过C++ 11中的rvalue引用,它们可能是一个潜在的解决方案吗?
编辑:我找到了一种方法来输入我的实际代码.
这不需要C++ 11.只要:
float & operator[](std::size_t i) { return data[i]; }
Run Code Online (Sandbox Code Playgroud)
现在你可以说v[2] = 5;,一切都很好.
如果需要,可以添加一个不使用引用的常量重载,并且可以用于读取该值.
float operator[](std::size_t i) const { return data[i]; }
Run Code Online (Sandbox Code Playgroud)
您可以考虑rvalue成员函数限定符的唯一时间是您是否允许分配给临时成员:
vec4{}[2] = 5;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您仍然返回左值引用,但您必须限定成员函数:
float & operator[](std::size_t i) && { return data[i]; }
// ^^^^
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
149 次 |
| 最近记录: |