Rvalue和左值引用作为类中的成员变量 - 有效吗?

时间:2017-10-25 13:36:52

标签: c++ reference c++14 rvalue-reference

from tkinter import *

root = Tk()

frame1 = Frame(root)
frame2 = Frame(root)

frame1.pack(side="left")
frame2.pack(side="right")

label1 = Label(frame1, text="I'm grid")
label2 = Label(frame1, text="I'm grid")
label3 = Label(frame2, text="I'm pack")
label4 = Label(frame2, text="I'm pack")

label1.grid(row=0, column=0)
label2.grid(row=0, column=1)
label3.pack()
label4.pack()

root.mainloop()

=&GT;成员变量引用(#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; } lvalue)的值是垃圾吗?  我看到不同编译器的不同行为。所以想知道c ++标准对此有何看法。

1 个答案:

答案 0 :(得分:1)

您将引用成员绑定到局部变量,这些变量将在退出函数fun()时被销毁。在那之后,两个引用都变得悬空,对它们的任何取消引用都会导致UB。

对于左值和左值参考成员都是如此。