2017-10-25 4 views
1
#include <iostream> 
#include <string> 
#include <vector> 

class X 
{ 
    public: 
    int& a; 
    int&& b; 

    X(int& c, int && d):a(c), b(std::move(d)) 
    { 

    } 
}; 

X* x = nullptr; 
void fun() 
{ 

    std::cout<<"Fun\n"; 
    int l = 8; 
    int r = 9; 
    std::cout << &(l) << std::endl; 
    std::cout << &(r) << std::endl; 
    x = new X(l, std::move(r));  
} 

int main() 
{ 
    fun(); 

    std::cout << x->a << std::endl; 
    std::cout << &(x->a) << std::endl; 

    std::cout << x->b << std::endl; 
    std::cout << &(x->b) << std::endl; 

} 

=>メンバー変数参照の値(lvaluervalue)はゴミになりますか?
異なるコンパイラで異なる動作が発生しています。だから、C++標準がこれについて何を言うのか知りたかったのです。クラス内のメンバー変数としての左辺値と左辺値の参照 - 有効?

+2

'rvalue' * reference *として*データメンバ*はうまくいっていません....あなたは本当に完全な型を動かすことができません(https://stackoverflow.com/questions/14679605/do-built-in-types-have-move-semantics).. – WhiZTiM

答えて

1

参照メンバーをローカル変数にバインドしていますが、これは関数fun()から抜け出すと破棄されます。その後、両方の参照がぶら下がり、それらの逆参照がUBにつながります。

これは、左辺値と右辺値参照メンバーの両方に当てはまります。

関連する問題