을 :: 바로 f(t)
가 호출 될 때 t
의 값이 멀리 이동 한 이후초기화 목록 및 표준 앞으로
class D { /* ... */ };
int f (const D & t) { return /* something calculated from t */; }
template<class T>
class C {
private:
int m_i;
T m_t;
// or first m_t, then m_i -- careless order of declarations
public:
template<class T_>
C (T_ && t) : m_t (std::forward<T_> (t)), m_i (f (t)) {
}
};
C<D> c (D());
버그로 이어질 수 있다는 가정에서 나는 건가요? (i) 공장 기능을 사용하거나 (ii) m_i
및 m_t
이 선언 된 순서에 대한 종속성을 소개하는 것과는 별도로이 문제를 피할 수있는 방법이 있습니까?
선언을 재정렬하고'f (m_t) '를 사용하는 것은 잘못된 일입니까? 그것도 의미가있는 유일한 것 같다. ('T'를위한 명시 적 생성자를 생각해 보라). –
나쁜 스타일과 오류가 발생하기 쉬운 것으로 생각했습니다. – JohnB
글쎄, 당신이 필요로하는 것이 필요합니다. * 프로그래밍 *은 오류가 발생하기 쉽습니다. 나는이 디자인이 마음에 들지 않는다. ('f'와'T_'의 이상한 관계는 무엇인가?).하지만 그것이 당신이 필요로하는 것이라면, 당신은 그것을해야만한다 ... –