1

다음은 문제의 코드입니다.캐스트와 타입 간의 연관성. Visual Studio에서

void SomeClass::Init(const vector<string>& args) { 
    int argc = (int)args.size(); 
    //... 
} 

Windows 7 64 비트 Visual Studio 2015 업데이트 3에서 작동합니다.

제 질문은 연산자 결합성에 대한 나의 이해에 따라 cast (int)와 member selector를 입력하십시오. ("C++ Primer, 5ed"에서 발췌 한 스크린 샷을 참조하십시오.) 따라서 연관성에 따라 평가 순서를 결정해야합니다. 그러나이 수준의 연관성이 왼쪽에 표시됩니다. 즉, 표현식이 왼쪽에서 오른쪽으로 평가됩니다. 그래서 (int) args가 먼저 평가되고 args가 int로 바뀝니다. 그런 다음 int 버전의 args는 존재하지 않는 size 함수를 호출하려고하므로 컴파일 오류가 발생합니다. 그러나 Visual Studio 2015는 오류를보고하지 않고 예상대로 실행됩니다. 오른쪽에있는 식은 size() 함수를 먼저 호출 한 다음 반환 된 값을 int로 변환합니다. 왜? 연관성에 대한 나의 이해가 잘못 되었나요? 아니면 제가 빠진 것이 있습니까? 도와 줘서 고마워. 당신이 사용하고있는 것은 멤버 액세스 연산자보다 precedence 낮은 가지고있는,하지 function cast하지만 c-style cast

enter image description here

+0

사용중인 기능은 캐스트가 아니라 멤버 액세스 연산자와 우선 순위가 다른 C 스타일의 캐스트입니다. [여기] (http://en.cppreference.com/w/cpp/language/operator_precedence)를 참조하십시오. – songyuanyao

+0

@songyuanyao : 감사합니다. 당신 말이 맞아요. 제 질문에 대한 대답에 당신의 아이디어를 쓰시겠습니까? – user5280911

답변

1

주입니다.

따라서 (int)args.size()(int) (args.size())과 동일하며 잘 작동합니다.

관련 문제