小编Isl*_*een的帖子

按位求反后出现右移的意外结果

我期望下面的代码将输出,10因为它(~port)等于10100101 So,当我们右移它时,4得到的0000101010。但是输出是250!为什么?

int main()
{
    uint8_t port = 0x5a;
    uint8_t result_8 =  (~port) >> 4;
    //result_8 = result_8 >> 4;

    printf("%i", result_8);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c bit-manipulation

21
推荐指数
1
解决办法
789
查看次数

尽管参数是 r 值引用,但为什么要使用 std::move

我对std::move()在下面的代码中使用感到困惑:

如果我在 (2) 处取消注释行,输出将是:1 2 3但如果我在 (1) 处取消注释行,输出将什么都不是,这意味着std::vector调用了移动构造函数!

为什么我们必须再次调用std::moveat (1) 来调用移动构造函数std::vector

我的理解是std::move得到r-value其参数的话,为什么我们要得到r-valuer-value在(1)?

我认为_v = rv;(2) 中的这一行更合乎逻辑,应该使std::vector移动构造函数不被调用,std::move因为rv它首先是r-value引用。

template <class T>
class A
{
public:
    void set(std::vector<T> & lv)
    {

    }  
    void set(std::vector<T> && rv)
    {           
        //_v = std::move(rv);          (1)
        //_v = rv;                     (2)
    }

private:
    std::vector<T> _v;
};

int main()
{
    std::vector<int> vec{1,2,3}; …
Run Code Online (Sandbox Code Playgroud)

c++ move c++11 c++14 stdmove

12
推荐指数
1
解决办法
1166
查看次数

标签 统计

bit-manipulation ×1

c ×1

c++ ×1

c++11 ×1

c++14 ×1

move ×1

stdmove ×1