C: I++ ++i 및 차이가 뭘까?
C 에서, '는 어떤 차이가 ++i 를 사용하여 i++' 및 '와' 를 사용할 수 있는 '블록' 을 하는 잉크레멘테이션 루프?
813
21
C 에서, '는 어떤 차이가 ++i 를 사용하여 i++' 및 '와' 를 사용할 수 있는 '블록' 을 하는 잉크레멘테이션 루프?
i = 1. j = ++i. (i, j 는 2 2) 입니다.
i = 1. j = i++. (i, j 는 2 인 1)
루프 '를 위한' 인컨텍스트 작동합니다. 그게 더 흔하게 사용되고 ++i 것 같다 '' 때문인지 K&, R.
모든 경우에 따라 ',', '" i++ 보다 ++i 준수하십시오 " 포지셔닝하십시오' # 39, won& 진실이며당신이 문제가 발생할 수밖에 없다.
39 에 대한 주석을 there& 몇 ++i i++ '와' 효율 ''. 믿지아니하며 비사양 수강생용 프로젝트 컴파일러, 성능 차이가 있을 수 없다. 이터레이션으로 교체되었는지 생성된 코드를 확인할 수 있으며, 될 수 있는 동일해집니다.
질문 효율성을 흥미롭습니다. # 39 의 시도는 here& 내 대답: https://stackoverflow.com/questions/24886/is-there-a-performance-difference-between-i-and-i > <;
, # 39 의 Freund) 에 따라 차이가 있기 때문에 'operator++ 유라유라테이코쿠 it& C++ 컴파일러 ()' 는 기능 및 객체에는 can& # 39, 임시 객체 생성 빼냅니다 최적화하려면 중간값 수용할 수 있을지 알 수 없다.
'i++' *
i++ post & # 39 는 '' 때문에 'i' 의 값을 1 씩 증분우선순위수준우선 증분을 작업 후 끝났다네.
다음 예를 볼 수 있습니다.
하지만 여기서 'j' 1 '2' 의 가치를 i =. = 여기서 'i' 가치 'j' 다음 'i' 를 먼저 배정됩니다 증가합니다.
& # 39 ++i '는' 때문에 'i' 의 값을 1 씩 증분을 증분우선순위수준우선 사전 작업을 시작하기 전에. = i, j '가' i++ 실행하십시오 무슨뜻이냐믄 '후'.
다음 예를 볼 수 있습니다.
하지만 여기서 'j' 2 '2' 의 가치를 i =. = 여기서 'j' 를 '가치' 난 후 배정됩니다 잉크레멘션 'i' 의 'i'. 마찬가지로 '전 = i, j' 실행됨을 ++i ''.
39, t, efficiency" " desktopplatforms don& 걱정. (속도, 정말) 재배케하여 더 빠릅니다. 우리는 이러한 일이 잘있게나 컴파일러에도 이러한 전지전능하심이라 둘 중 하나를 사용하여 보다 분명하게 이해할 수 기준으로 사용할 수 있는 의도를 보여 줍니다.
'가치' 증분을 되돌려줍니다 ++i 관심용 거잖나.
i++ '다음' 값을 되돌려줍니다 증분을 거잖나.
39 의 it& 미묘한 차이가 났다.
For 루프는 ++i 를 사용하여 ',' 로 it& # 39 의 약간 빨라집니다. i++ 생성하시겠습니까 '가' 가 추가 카피됐나 그냥 던져진다.
i++ ':' 첫 번째 값은 이 시나리오에서의 할당되었는지 그리곤요 증분식 일이 발생한다.
'++i': 먼저 이 시나리오에서의 증분우선순위수준우선 완료되어도 그리곤요 값을 할당되었는지
다음은 시각화 및 이미지 또한 [슬라이드에서는 좋은 실용 영상] (http://www.youtube.com/watch? v = lrtcfgbUXm4) 가 동일한 보여준다.
enter 이미지 여기에 설명을!
I++ 보다 ++i 수 있는 것은 '' '약간' 에로남이네 i++ 로컬 복제본이므로 요구할 수 있다 '' 난 ',' 절대 동안 증분됩니다 가치를 심해지기 전에 ++i 않습니다. 경우에 따라서는 일부 컴파일러에도 거두어 최적화합니다 가능하면 했다. 하지만 이 모든 것이 항상 가능한 it& # 39 의 아니라 못하며창조된 컴파일러에도.
39 에 최적화, 그래서 내가 너무 많이 빠지지 않고, d, s # 39 컴파일러에도 I& 따라와야지 라이언 Fox& 조언: when I ',' 내가 사용하는 ++i 를 모두 사용할 수 있습니다.
두 정상은 증분할 번호입니다. + 1 = "나는 '내가' ++i '에 해당하는 것이다.
i++ 매우 유사한 '이 아니라' '와' ++i 똑같은. 하지만 '수' 증분을 ++i 전에 모두 증분할 번호, 현재 표현식에서는 반면, '수' 증분을 검사됩니다 i++ 후 표현식에서는 검사됩니다.
예:
그 중 하나를 사용하여 는 유효 동일해집니다. 즉, 루프 할 일을 정확히 동일한 모두에서 인스턴스입니다.
I++ ++i 를 통한 효율성 측면에서 관련이 있을 수 있다는 것. 측면에서 언어를 사용하여 만들 수 있는 가치를 추가 복제본이므로 사양명세 게시물로의 증분식 작동자 /dev/raw/raw200 연산자에서 움직이고 있습니다. 이 관계자는 추가 작업이 될 수 있다.
그러나 앞의 두 가지 문제를 고려해야 할 수 없다.
현대 컴파일러에도 매우 크다. 이 모든 것을 볼 수 있는 것은 컴파일러에도 머리가 너무 좋은 것 같은 두 가지 방법 모두 정수 증분할 for 루프는 최적화합니다 효율적인 코드를. 실제로 사용하는 경우 프로그램에 비해 느린 것으로 인해 게시물로의 증분식 사전 증분식 실행 시간 후 컴파일러와의 사악함이라 사용하고 있습니다.
시간 복잡도 운영 면에서, 이 두 가지 방법 (해도 실제로 복제본에 수행 중인) 동일합니다. 루프 내부에 지침을 수를 작전을 수행 중인 지배하십시오 증분우선순위수준우선 작업을 할 수가 크게. 따라서 믿지아니하며 상당히 크기, 루프 성능저하 증분식 메서드입니다 적립율은 대규모 밀려 실행할 루프 바디입니다. 즉, 너는 내가 긁어줄게 오프하도록 코드만이 최적화합니다 루프의 걱정 아닌 증분식.
제 생각에는, 스타일, 결국 이 모든 문제를 단순히 아래로 기본. 그렇게 생각한다면 사전 증분식 판독값, 더 후 사용한다. 개인적으로 선호하는 게시물로의 린스먼트 요소라고 할 수 있으나, 그 전에 내가 가르쳐 준 전송되었기 때문에 내가 알고 있는 것은 아무것도 최적화합니다.
이는 전형적인 예로, 이 문제가 이렇게 심각한 문제가 발생할 수 있는 눈을 너무 일찍 최적화, 미국 디자인. 좋은 질문, 그러나 아직 없기 때문에 일반적으로 사용 또는 합의, best 에 " 조도비 practice.".
'++i': 다른 하나는 게시물로의 증분식 사전 증분식 있다.
i++ ':' 그 후 증분을 요소점과 가져옵니다. '++i': 난 후 증분을 되돌려줍니다 요소.
예:
출력:
'++i' (접두어입니다 작업). * 다음 값은 증분을 color_name (예): '내가', 'int b = ++i' int = 5 이 경우, 6 할당되었는지 b 첫 그리곤요 증분을 7 및 드릴링됩니다.
'i++' (후위 작업). * 다음 가치를 증분을 color_name (예): '내가', 'int b = i++' int = 5 이 경우 5 할당되었는지 b 그리곤요 증분을 첫 6 및 드릴링됩니다.
을 넣다) 의 루프: i++ ',' 우리가 사용하는 값 때문에 일반적으로 주로 사용되는 시작 전에 "나는 '에서 루프지 증가 하지만 프로그램 논리에 따라 달라질 수 있습니다.
i++ 및 ++i # #
이 작은 차이가 좀 다른 각도에서 답을 이미 게시하기를 비해 코드를 시각화합니다 데 도움이 될 수 있습니다.
결과는.
전후에 이슬람세를 신경을 쓰고 있습니다.
# for 루프
그 중 하나를 사용할 수 있는 경우와 작업공간에서 잉크레멘테이션 for 루프는 블록, 내 생각에 우리가 할 수 있는 최선의 결정을 내리는 것은 사용) 가 좋은 예다.
다음의 C 코드 부분은 전치 차이는 사전 및 사후 증감 연산자:
증분식 연산자:
지금 내가 solaris. 이해하겠니 차이는 시맨틱스를 (단, 왜 그랬을까 장난하는거아니고
39, & # 39 는 어떤 X mean& 연산자입니다 하나님께용서를 백성중에. 스택 오버플로 대한 질문이 아닌 판독값,
you know, 책 또는 웹 자습서는 또는 무언가.
어쨌든 지금처럼 계속 사용할 수 있는 성능을 어느쪽이야 무시입니다 질문을합니다 심지어 c++컴파일러는 중요한 것 같지는 않습니다. 이것은 콩지름에 결정할 때 때문이다. 사용할:
무슨 뜻인지 말하도다 코드에서.
39 don& 할 경우, t, t, don& 전에 값을 증분식 기술서임을 # 39 에 사용하는 형태의 모습이다. # 39 의 it& 않으면 사소한 시비로 작업하고 있지만 한 것을 금지하는 스타일 가이드
다른 버전 모두 찬성하는 (lc-fc 한 뼈 머리 스타일 가이드), 콩지름에 이 경우는 가장 정확하게 할 수 있는 형태로 너희는너희가 위해 노력하고 있다.
QED) 을 사용하여 사전 증분식 버전:
>. 주요 차이는 >. >. i++ 게시물로의 ( 후 증분식 ) 와 - >. - ++i 사전 ( 전에 증분식 ) >. >. - i = 1 ',' n 'like' 1.2,3.4 루프 증분을 못할 경우 >. - i = 1 ',' n '사전' 같은 경우 증분을 2.3,4.5 루프
이 단순한 C++ 코드에 의해 차이를 이해할 수 있다 (아래 참조).
얼마 지나지 않아.
i++ 먹어서나 않을 경우 이들을 '는' ++i '와' 같은 함수. 같은 항목을 사용할 경우 '함수 (i++)' 또는 '함수 (++i)' 차이를 볼 수 있습니다.
'내가 먼저 함수 (++i)' 이 'i' 에 따르면, 이후에는 동일팔레트에 증분우선순위수준우선 새 값을 1 씩 작동합니다.
'기능이 있다고 (i++)' 'i' 를 통해 그 이후 첫 동일팔레트에 함수은 증분우선순위수준우선 'i' 1.
유일한 차이점은 운영 주문하십시오 증분우선순위수준우선 간의 변수의 값을 연산자에서 되돌려줍니다.
이 코드는 출력입니다 차이에 대해 설명하고 있다.
출력은 다음과 같습니다.
그래서 기본적으로 ',' 동시에 '후' ++i 값을 되돌려줍니다 증분됩니다 ++i 전에 값을 되돌려줍니다 올라갑니다. 결국 이 두 경우 모두 '나' 증분됩니다 그 값을 가지게 됩니다.
또 다른 예를 들어:
출력:
# 여러 차례 차이가 없습니다
차이가 있을 때 또 다른 변수가 할당되었는지 증분우선순위수준우선 수행될 때 선택해제합니다 반환 값 또는 다른 작업과 적용되고 있는 연결 (운영체 우선 순위 ('i++2' 다르다 '++i ' 하지만 ' (i++) 2' 와 ' (++i) *2' 같은 값을 되돌려줍니다) 대부분의 경우, 교환 가능. 고전적인 비유하사 for 루프 문법:
내부 변환되게 것으로 생각할 수 있는 여러 명령문입니다 a ,
i++ 고말은 a 가 a = 현재 i 값 내가 값을 a 가 a = ++i 증분됩니다 고말은