執行以下代碼:爲什麼具有引用的類不符合standard_layout?
#include <iostream>
#include <type_traits>
struct s_ref {
int &foo;
};
struct s_ptr {
int *foo;
};
int main(int argc, char *argv[])
{
std::cout << "s_ref is_standard_layout:" << std::is_standard_layout<struct s_ref>::value << std::endl;
std::cout << "s_ptr is_standard_layout:" << std::is_standard_layout<struct s_ptr>::value << std::endl;
return 0;
}
結果:
s_ref is_standard_layout:0
s_ptr is_standard_layout:1
基於標準佈局的用途(即:「標準佈局類型是寫在其他編程語言代碼進行通信的」 )這是有道理的,但我不確定哪個是違規的規則:
標準佈局類是一個類(用類,結構或定義工會)認爲:
沒有虛擬功能和沒有虛擬基類。
對於其所有非靜態數據成員具有相同的訪問控制(私有,受保護,公共)。
要麼在派生類最多,要麼最多隻有一個具有非靜態數據成員的基類中有非靜態數據成員,或者沒有帶有非靜態數據成員的 基類。
它的基類(如果有的話)本身也是標準佈局類。
而且,沒有與其第一個非靜態數據 成員相同類型的基類。
編輯:報價是:http://www.cplusplus.com/reference/type_traits/is_standard_layout/,但http://en.cppreference.com/w/cpp/concept/StandardLayoutType也是類似的。
很酷的問題! :) – erip
什麼是您的報價來源? –
@ Cheersandhth.-Alf很可能[cplusplus.com](http://www.cplusplus.com/reference/type_traits/is_standard_layout/)。 – Holt