簡體   English   中英

C ++構造函數初始化列表中的C struct復制

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM