84669인 학습
152542인 학습
20005인 학습
5487인 학습
7821인 학습
359900인 학습
3350인 학습
180660인 학습
48569인 학습
18603인 학습
40936인 학습
1549인 학습
1183인 학습
32909인 학습
아래 코드에서 언급했듯이 X와 Y는 정상적으로 생성될 수 있지만 A와 B는 'const int'을 'int []'에 할당할 때 오류 [Error] 호환되지 않는 유형을 보고합니다.
위 상황에서 초기화 목록에 배열을 전달하는 방법을 알려주세요. 이렇게 달성되었습니다
이러한 방식으로 멤버 변수는 임의 크기의 배열로 초기화됩니다.
建议用std::vector<int>,构造函数接受const std::vector<int> &arr,拷贝用this->o = arr即可。
std::vector<int>
const std::vector<int> &arr
this->o = arr
这个问题可以转化成:哪些形参形式可以传递初始化列表?
非模板:
void foo(T), void foo(const T &),当T可以用初始化列表拷贝初始化时。即初始化T x = {...};合法。
void foo(T), void foo(const T &)
T x = {...};
void foo(std::initializer_list<T>)
模板:
template <class T> void foo(std::initializer_list<T>)
template <size_t N> void foo(const T (&)[N])
template <class T, size_t N> void foo(const T (&)[N]),这个说是C++17才可以,但是有些编译器已经支持了。
template <class T, size_t N> void foo(const T (&)[N])
代码样例,另含几种常见的不可以的情况。
初始化数组成员变量:似乎没有比较简单的办法在初始化列表里初始化数组成员。建议在构造函数的函数体内赋值。不过可以用模板实现:
#include <cstddef> #include <utility> class A { public: template <class... Args> A(Args... args) : x_{args...} {} virtual void foo() {} // 阻止aggregate initialization private: int x_[4]; }; template <class T, class U, size_t... ints> A FactoryImpl(const T &list, std::integer_sequence<U, ints...>) { return {list[ints]...}; } template <class T, size_t N> auto Factory(const T (&arr)[N]) { return FactoryImpl(arr, std::make_index_sequence<N>()); } int main() { A x = {1,2,3,4}; A y = Factory({1,2,3,4}); return 0; }
建议用
std::vector<int>
,构造函数接受const std::vector<int> &arr
,拷贝用this->o = arr
即可。这个问题可以转化成:哪些形参形式可以传递初始化列表?
非模板:
void foo(T), void foo(const T &)
,当T可以用初始化列表拷贝初始化时。即初始化T x = {...};
合法。void foo(std::initializer_list<T>)
模板:
template <class T> void foo(std::initializer_list<T>)
template <size_t N> void foo(const T (&)[N])
template <class T, size_t N> void foo(const T (&)[N])
,这个说是C++17才可以,但是有些编译器已经支持了。代码样例,另含几种常见的不可以的情况。
初始化数组成员变量:似乎没有比较简单的办法在初始化列表里初始化数组成员。建议在构造函数的函数体内赋值。不过可以用模板实现: