함수 파라미터에 const 붙여줌?
[%] c++에서 int나 float 같은것도
익명(1.231)
2020-03-08 14:41
추천 0
댓글 20
다른 게시글
-
웹 버전이 없어도 전 우주 통신규약이 되고 싶어 [4][%] 익명(194.5) | 20.03.08추천 0
-
자바를 할수밖에 없는이유 [2][%] 익명(14.46) | 20.03.08추천 0
-
크롬 웹스토어에 라인 있던데 차라리 카톡도 [2][%] 익명(175.223) | 20.03.08추천 0
-
윈도우 20H1 언제 업뎃되냐고 [1][%] 익명(175.223) | 20.03.08추천 0
-
아래 글 보고 든 생각인데 코드 짤 때 [2][%] 익명(202.150) | 20.03.08추천 0
-
c, gtk, glib 강좌함 해보까? [10][%] 익명(218.147) | 20.03.08추천 0
-
밑에 뽑기 확률 풀어봤심. [4][%] asdf(115.22) | 20.03.08추천 0
-
마소 새끼들 텔레메트리로 별걸 다 수집하네 [4][%] 익명(194.5) | 20.03.08추천 0
-
확률 그림으로 설명해옴 [2][%] 시모(lawfull) | 20.03.08추천 0
-
디스코드 서버가 러스트라는데 [9][%] 익명(211.36) | 20.03.08추천 0
안바뀌어야되는 값일때 const 붙이는건 sizeof(T)가 작다해서 달라지진않음 레퍼런스나 포인터를 붙이는거면 몰라도
리샤퍼 깔았는데 자꾸 const가 리던던트 하다고 그래서 궁금했음 그럼 int나 float같은거는 레퍼런스 안붙임?
함수 argument로 받은 int나 float을 바꿔야된다면 레퍼런스를 붙여야되고 안바꾸고 값을 읽기만할때 const T&를 할꺼냐 그냥 T를 넘길꺼냐가 좀 다른데 sizeof(T)가 포인터값이랑 비슷하면 걍 pass by value가 더 빨러 -O3 일때 대부분상황에서 똑같긴한데 옛날컴파일러면 const T&가 좀더 느린경우도 있음
아니다 정정함 모든컴파일러에서 다 테스트해본건 아닌데 -O3이면 간단한 함수에서 sizeof(T)가 작았을때 pass by value랑 똑같이 어셈 찍혀나올줄알았는데 아니네
그럼 작을때는 그냥 값으로 보내는게 맞구나
아니 안 붙이지
안붙이는 이유가 머야
https://stackoverflow.com/questions/7561690/why-do-we-not-pass-pod-by-reference-in-functions/7561710#7561710
포인터 (8 바이트 + 레퍼런스 코스트), float, int (4바이트, 레퍼런스 없이 값그대로 사용)
심지어 32바이트까지는 fastcall로 전달 가능해서 레퍼런스보다 카피가 빠름
아 콘스트 레퍼런스로 보내면 메모리를 두번 읽고, 값으로 보내면 복사 후 한번만 읽는거구나
근데 레퍼런스 이야기 말고 그냥 const를 붙이냐 안붙이냐는 그냥 취향인가? 리샤퍼에서 자꾸 붙일필요가 없다고 나왕
pass by value일때 값을 안바꿔도 const 안붙이는 사람도 많긴한데 개인적인 의견으론 값을 안바꾸면 명확하게 붙이면 남이 읽기도 더 편하고 컴파일러가 최적화도 더 해줄거라는 생각에 안바뀌는값이면 무조껀 붙임
값전달이니까 붙일 필요가 없지
나도 혹시 모를 최적화+의미 때문에 const박고 시작하는 편
https://github.com/microsoft/STL/blob/0d75fc5ab6684d4f6239879a6ec162aad0da860d/stl/inc/vector#L1241
appeal
to authority fallacy 긴 한데 붙이는프로젝트도 많음
전혀 붙일 필요없음. const 붙인다고 최적화 패스 안 달라짐. 그건 아주 옛날 컴파일러나 해당.
레퍼런스를 안 붙이면 어차피 int를 넘기나 float를 넘기나 call site에서 값이 바뀔 염려가 없는데 왜 const를 붙이겟음
위의 의견처럼 남이 읽기 편하고 의미가 명확하다는 점은 동의하지만, 컴파일러는 pass by value이기만 하면 그냥 지맘대로 최적화할 거 같음
흠 정리하면 const를 붙이든 안붙이든 값으로 보내면 성능차는 없고 그냥 뭐 읽기 편하라고 붙이는 것 처럼 취향 차이고만