根據C++標準,在初始化引用的對象之前複製引用是否爲未定義行爲?這發生在以下示例中,其中我傳遞對父類的引用,並且僅在後面初始化對象的值,因爲對父構造函數的調用必須首先在初始化程序列表中進行。將引用複製到C++中的未初始化對象
#include <iostream>
struct Object
{
int val;
Object(int i): val(i) {}
};
struct Parent
{
Object& ref;
Parent(Object& i): ref(i){}
};
struct Child : Parent
{
Object obj;
Child(int i): Parent(obj), obj(i) {}
};
int main()
{
std::cout << Child(3).ref.val;
}
這裏時家長與父(OBJ)初始化的OBJ的價值還沒有被初始化。
這編譯好gcc下,我得到一個正確的輸出,但我不知道是否標準或良好的編碼實踐建議反對它。這是一個未定義的行爲?如果不是,我應該避免這是一種糟糕的做法嗎?
您沒有未初始化的引用,而是對未初始化的對象的引用。這與您從標準中引用的情況不同,只要「Parent」在所有內容初始化之前都不使用引用,代碼就可以。 –
謝謝,我更新了標題以反映您的評論。你說的話確實有意義,因爲它是指向未初始化對象的指針會發生什麼。 – Flynsee
Bos的評論也回答了你的問題嗎?還是你編輯來澄清你問的不同之處? – Yunnosch