새로운 구문 대신 ()
이전의 구문을 사용할시기를 결정하는 경험이 있습니까 {}
? {} 대신()을 사용할 C++ 0x의 통일 초기화?
vector
의 경우 지금
struct myclass
{
myclass(int px, int py) : x(px), y(py) {}
private:
int x, y;
};
...
myclass object{0, 0};
를, 많은 생성자가 있습니다. 다음 작업을 수행 할 때마다 : 생성자 중 하나이기 때문에
vector<double> numbers{10};
나는 10 요소가 1 요소의 벡터 대신 하나를 얻을 :
explicit vector (size_type n, const T& value= T(), const Allocator& = Allocator());
내 의심 할 때마다하는 것입니다 벡터의 경우와 마찬가지로 initializer list
생성자를 정의하면 {}
구문과 함께 호출됩니다.
그래서 내가 옳다고 생각하는 것입니다. 즉 클래스가 초기화 생성자 목록 생성자를 정의하여 다른 생성자를 호출 할 때만 이전 구문으로 되돌려 야합니까? 예 :
vector<double> numbers(10); // 10 elements instead of just one element with value=10
초기화 프로그램 목록 생성자를 추가 할 때 클래스 클라이언트를 손상시킬 수 있습니까? 아야. –
아니요, 이니셜 라이저 생성자는 AFAIK 위치의 다른 생성자에 영향을주지 않습니다. –
@dribeas : 확실한가요? 클래스가 처음에 단일 int 인수를 취하는 생성자를 가지고 있고 새로운 구문으로 인스턴스를 생성한다고 가정 해 보겠습니다. 'initializer_list'을 사용하는 새로운 생성자가 추가되면, 이제 모든 객체가 추가 된 생성자를 사용하지 않을까요? 그물에있는 예제가 시대에 뒤떨어져 있고 목록에있는 벡터를 선언하는 것이 실제로 벡터 v {{2, 1}}와 같이 보이지 않는 한, 어디에서나 대괄호가 보이지 않습니다. –
UncleBens