标签: rvalue

当深度返回时,右值引用会中断

从超过1的深度传递返回的右值引用时遇到问题.

struct Data {
 std :: vector <int> data;
 Data () {
  data .push_back (1);
 };

 Data (Data && d)
 : data (std :: move (d .data))
 {}
};

Data && foo () {
 Data d;
 return std :: move (d);
}

Data && bar () {
 return std :: move (foo ()); // Crashes in autogenerated code
}

Data && baz () {
 return foo (); // Crashes in Data move constructor.
}

Data && bop () {
 Data …
Run Code Online (Sandbox Code Playgroud)

c++ gcc reference rvalue c++11

0
推荐指数
2
解决办法
268
查看次数

在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++ rvalue rvalue-reference c++11

0
推荐指数
1
解决办法
149
查看次数

这段代码应该做什么?(参考右值)

我已经读过下面的代码在C++ 11中有效:

int && a = 3;
a = 4;
Run Code Online (Sandbox Code Playgroud)

是否应该在存储数字文字3的内存地址中写入4?也许一些编译器优化可以防止这种情况发生,但它应该这样做吗?

c++ rvalue c++11

0
推荐指数
1
解决办法
152
查看次数

命名"左值"和"右值"背后的原因是什么?

在C/C++中命名"左值"和"右值"背后的原因是什么(我知道它们是如何运作的)?

c c++ terminology rvalue lvalue

0
推荐指数
1
解决办法
590
查看次数

右值不起作用参考

我正在研究引用,我正在尝试一个程序将rvalue传递给函数作为引用参数,就像这样.

#include<iostream>
using namespace std;

int fun(int &x)
{
    return x;
}
int main()
{
    cout << fun(10);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用,当我试图通过左值时,它起作用了.

#include<iostream>
using namespace std;

int fun(int &x)
{
    return x;
}
int main()
{
    int x=10;
    cout << fun(x);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

谁能解释我为什么会这样?

c++ reference rvalue lvalue

0
推荐指数
1
解决办法
51
查看次数

C++左值,右值,引用,参数和性能

所以我有一个函数需要将std :: vector作为参数.我想知道声明参数的最佳方法,以便底层数组不会被深度复制,因为它可能相当大.

// which should I choose?
void myFunc(std::vector<char>); // 1
void myFunc(std::vector<char>&); // 2
void myFunc(std::vector<char>&&);  // 3
void myFunc(std::vector<char>*) // 4
Run Code Online (Sandbox Code Playgroud)

我该选哪个?另外,我不会修改函数中的向量,所以不应该添加const?我应该重载该功能并将它们组合在一起吗?

c++ parameters rvalue lvalue c++11

0
推荐指数
1
解决办法
427
查看次数

const 引用会延长临时对象返回的临时对象的寿命吗?

我知道 const 引用会延长本地临时文件的寿命。现在我问自己是否可以在临时对象链上扩展此属性,也就是说,我是否可以安全地定义:

std::string const& foo = aBar.getTemporaryObject1().getTemporaryObject2();
Run Code Online (Sandbox Code Playgroud)

我的感觉是,由于第一个方法aBar.getTemporaryObject1()已经返回了一个临时对象,因此不适用于aBar.getTemporaryObject2().

c++ lifetime rvalue temporary-objects reference-binding

0
推荐指数
1
解决办法
620
查看次数

用 C 语言计算什么更快?(x==0) 还是 (0==x)?

我想知道用C语言计算什么更好:

if (x==0) 
{
    // Some code ...
}
Run Code Online (Sandbox Code Playgroud)

if (0==x) 
{
    // Some code ...
}
Run Code Online (Sandbox Code Playgroud)

我知道最后一个更好,以防程序员忘记第二个“=”并写“0 = x”而不是“0 == x”,因为编译器会抛出错误。

但我的问题是:

  1. 从处理器的角度来看,在计算时间内。
  2. 一般来说(不仅适用于 AMD/Intel CPU,也适用于具有不同处理器的嵌入式组件。

我认为这与“左值”和“右值”有关,并且我尝试在我的电脑中进行模拟,但没有任何重要的见解。

c embedded rvalue lvalue compiler-optimization

-2
推荐指数
1
解决办法
101
查看次数