[英]C struct copy in C++ constructor initialization list
我的問題是以下代碼:
extern "C" struct CStruct {
char a;
char b;
};
class X {
CStruct cs;
public:
X(CStruct cs_arg) : cs{cs_arg} {}
X(CStruct cs, bool){
this->cs = cs;
}
};
Clang 3.4(c ++ 11)抱怨第一個構造函數,而不抱怨第二個構造函數。
../st2.cpp:10:25: error: no viable conversion from 'CStruct' to 'char'
X(CStruct cs_arg) : cs{cs_arg} {}
^~~~~~
1 error generated.
如果cs
成員顯然是一個結構,那么如何轉換為char? 我可以在初始化列表中進行這種初始化嗎,還是必須在函數體中進行? 為什么?
實際的代碼使用該類的模板,如果類型是簡單的POD結構,則該代碼將失敗。 它永遠都不能處理比POD結構更復雜的事情。
您正在使用聚合初始化。
你應該有
cs {char1, char2} .
如果要從另一個結構初始化,則應使用
cs(cs_arg).
或者,如果您不想使用復制構造函數
cs{cs_arg.a, cs_arg.b};
您是否要初始化CS? 然后代碼可以像
X(CStruct cs_arg) : cs(cs_arg) {} // change cs_arg{cs} to cs(cs_arg)
在這里,復制構造函數將被調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.