포인터 - C++ 초기화 목록에서 배열을 전달하는 방법은 무엇입니까?
巴扎黑
巴扎黑 2017-05-16 13:25:27
0
2
627

아래 코드에서 언급했듯이 X와 Y는 정상적으로 생성될 수 있지만 A와 B는 'const int'을 'int []'에 할당할 때 오류 [Error] 호환되지 않는 유형을 보고합니다.

위 상황에서 초기화 목록에 배열을 전달하는 방법을 알려주세요.
이렇게 달성되었습니다

으아악

이러한 방식으로 멤버 변수는 임의 크기의 배열로 초기화됩니다.

으아악
巴扎黑
巴扎黑

모든 응답(2)
黄舟

建议用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才可以,但是有些编译器已经支持了。

代码样例,另含几种常见的不可以的情况。

初始化数组成员变量:似乎没有比较简单的办法在初始化列表里初始化数组成员。建议在构造函数的函数体内赋值。不过可以用模板实现:

#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;
}
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!