![](/img/trans.png)
[英]Initialize static constexpr char array member with conditional operator in class template
[英]Initialize a static member of a class that includes an array?
我有一個帶有靜態數據成員的C ++類,該成員是一個常量。 我在類定義中添加了一個數組,現在嘗試初始化靜態成員時出現錯誤。
這是代碼:
class MyClass
{
int i1;
int i2;
int i3;
//bool b1[2];
//bool b2[2];
public:
//Constructors
MyClass();
MyClass(const int i1In, const int i2In, const int i3In
/*, const bool b1In[2], const bool b2In[2]*/
);
// Copy constructor
MyClass(const Input& rhs);
// Destructor
~MyClass();
// Assignment
MyClass& operator=(const MyClass& rhs);
// Operators
bool operator==(const MyClass& m2) const;
bool operator!=(const MyClass& m2) const;
MyClass& operator++(int/*serves no purpose, but must be included*/);
static const MyClass S;
};
const MyClass S = { 0, 0, 0 /*,{ false,false }, { false,false }*/ };
上面的代碼編譯沒有錯誤,並且S
的值符合預期。 但是,當我更改類定義以添加數組b1
和b2
(取消注釋類defn中的兩個位置並在S
初始化中添加兩個數組初始化器)時,出現錯誤
“ C2440:'正在初始化':無法從'初始化列表'轉換為'MyClass'注意:沒有構造函數可以采用源類型,否則構造函數重載解析不明確”。
定義具有指示值的MyClass
類型的常量變量的正確方法是什么?
Windows 7 Pro,Visual Studio 2015
讓構造函數通過常量引用獲取數組參數。
MyClass(/*...*/ const bool (&b1In)[2], const bool (&b2In)[2])
const MyClass MyClass::S(/*...*/ { false,false }, { false,false } );
數組為參數的語法實際上只是一個巧妙偽裝的指針,這就是為什么它不起作用。
另外,您的operator++(int)
返回一個引用。 因為那是后遞增運算符,所以它應該按值返回。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.