我期望下面的代码将输出,10因为它(~port)等于10100101
So,当我们右移它时,4得到的00001010是10。但是输出是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) 我对std::move()在下面的代码中使用感到困惑:
如果我在 (2) 处取消注释行,输出将是:1 2 3但如果我在 (1) 处取消注释行,输出将什么都不是,这意味着std::vector调用了移动构造函数!
为什么我们必须再次调用std::moveat (1) 来调用移动构造函数std::vector?
我的理解是std::move得到r-value其参数的话,为什么我们要得到r-value的r-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)