program story

두 개체가 한 줄로 선언 된 경우 어떤 순서로 구성됩니까?

inputbox 2020. 11. 23. 08:06
반응형

두 개체가 한 줄로 선언 된 경우 어떤 순서로 구성됩니까?


클래스가 다음과 같이 정의되었다고 가정 해 보겠습니다.

class A {
//.....
};

이제 두 개의 객체를

A a,b;

어떤 순서로 생성 a되고 b생성됩니까? 표준에 정의되어 있습니까?


8 명의 선언자 [dcl.decl] 3 :

선언의 각 init-declarator는 마치 선언에있는 것처럼 개별적으로 분석됩니다.

계속해서

여러 선언자가있는 선언은 일반적으로 각각 단일 선언자가있는 해당 선언 시퀀스와 동일합니다. 이는 T D1, D2, ... Dn;일반적으로 T D1; T D2; ... T Dn;어디에 Tdecl-specifier-seq가 있고 각각 Di이 init-declarator 인 것과 동일합니다 . 선언자 중 하나에 의해 도입 된 이름이 decl-specifier가 사용하는 형식 이름을 숨기는 경우 예외가 발생하여 동일한 decl-specifier가 후속 선언에서 사용될 때 동일한 의미를 갖지 않습니다.

왼쪽에서 오른쪽으로 구성되어 있다고 말할 수 있습니다.


C ++ 사양 8 장 [dcl.decl]은 다음과 같이 말합니다.

선언의init-declarator 는 마치 선언 에있는 것처럼 개별적으로 분석됩니다. (100)

각주 (100)는 다음과 같이 말합니다.

(100) 여러 선언자가있는 선언은 일반적으로 각각 단일 선언자가있는 해당 선언 시퀀스와 동일합니다. 그건

T D1, D2, ... Dn;

일반적으로 다음과 같습니다.

 T D1; T D2; ... T Dn;

... 그런 다음 몇 가지 예외를 지정합니다. 이러한 간단한 경우에는 적용되지 않습니다.

따라서 귀하의 질문에 대한 대답은 객체가 나열한 순서대로 구성된다는 것입니다. 그리고 쉼표 연산자가 아닙니다.


순서는 왼쪽에서 오른쪽으로 쓰여진 순서입니다. 또한 쉼표 연산자가 아니라 단순히 선언자 목록입니다. 사용자 정의 쉼표 연산자를 사용하면 실제로 순서가 지정되지 않습니다.

쉼표 연산자선언자를 참조하십시오 .


a 가 먼저 생성 된 다음 b 가 생성됩니다 .

이 경우 쉼표는 연산자가 아닌 구분 기호로 사용됩니다 .

예를 들어 wikipedia에서 :

    /**
      *  Commas act as separators in this line, not as an operator.
      *  Results: a=1, b=2, c=3, i=0
      */
     int a=1, b=2, c=3, i=0;

기준 :

선언자 [dcl.decl] :
선언의 각 init-declarator는 마치 선언에있는 것처럼 개별적으로 분석됩니다.

예:

class A {
public:
    A(std::string const &s): name(s) 
    { 
        std::cout << "I am " << name << '\n'; 
    }
    std::string name;
};

auto main() -> int
{
    A a("a"), b("b");
}

산출:

I am a
I am b

참고 URL : https://stackoverflow.com/questions/35561075/if-two-objects-are-declared-in-a-single-line-in-which-order-are-they-constructe

반응형