{ 왜냐하면, 함수의 인자 처리 순서는 각 컴파일러마다 다르며, 컴파일러 버전마다 다를 수도 있다. 결국 함수 인자의 처리 순서를 예상하고 함수에 인자를 전달한다면, 나중에 문제가 생길 위험이 있다. 그러니 이번 항목에서 말하는 제목을 반드시 기억해 두는 것이 좋다. 이 책은 안드레이 안렉산드레스쿠(Andrei Alexandrescu)와 허브 셔터(Herb Sutter) 가 만든 책으로 허브 셔터는 자신의 Exceptional C++ 에서 "스마트 포인터를 잘 사용하는 방법"에 대해서 썻던 항목들에, 이 문제점도 같이 정리해 두었었다. 그러므로 나는 이 항목에 대해서 더 이야기 하지는 않을 것이다. 왜냐하면 아주 간단하게 예만 보여줘도 충분히 이해 가능하기 떄문이다. 이 예제코드는 함수의 인자 처리 순서..
CPPCS 검색 결과
{ 알다시피 저 연산자들은 컴파일러에서 특별히 다루어 지며, 최적화가 이루어져 "단축 평가"가 되는 연산자 들이다. 만약 저 연산자들을 오버로딩 한다면, "단축 평가"는 무너지게 되고, 단축 평가를 예상하고 만들었던 코드를 단축평가가 없는 상태로 다시 만들어야 한다. 이래나 저래나 저 연산자들 까지 오버로딩 한다면, "이거 내가 잘짜고 있는거 맞나?" 라고 생각해 봐야 할 것이다. }
{ 즉, 암시적 타입 변환을 피하기 위해 오버로딩을 쓰라는 것이다, 그 이유는 C++은 동일한 이름의 함수라면 매개변수로 함수들을 구분짖는데, 이런 함수들 중에서 전달된 인자와 타입이 가장 "비슷한" 함수가 있다면, 암시적으로 형이 변하기전에 그 함수가 호출 되고, 없다면 모호성 에러를 벹어내게 해주기 때문이다. 즉, 이런 C++의 특징을 이용하여, 암시적 타입 변환을 피하라는 것이다. 다음 코드는 함수 f() 들 중에 float 매개변수를 받는 함수가 없을 때, 모호성 에러를 벹어내며서 컴파일 되지 않는 것을 보여 준다. 모호성 에러 예) #include void f( char ) { std::cout
{ 항목 27에서 표준적인 형식이 어떤 형식인지 말했으니 패스하고, 표준적인 형식의 ++와 --의 구현론( 한줄로 설명 된다)과 접두 형식을 왜 사용해야 하는지 알아 보자. 우선 알아야 할 것은 "++", "--"의 표준적인 형식이 무엇인가? 인데, 전위 연산자로 후위 연산자를 구현하는것이 표준적인 형식이다. 이 항목에 대해서는 C++ Standard Template Library 에서 이야기한 내용을 쓰기보단, 구글에서~ "전위 연산자" 라고 검색을 하면 자세히 나오니 넘어가자 그렇다면 왜 접두형식을 사용 해야 하는가? 왜냐하면 후위 연산자는 전위연산자를 사용해서 구현했는데, 전위 연산자의 경우, 자기 자신을 변화시키고 자신을 리턴하는 반면, 후위 연산자는 먼저 자신을 복사한 값을 만들고, 전위 연산자..
{ 왜냐하면, 헷갈리기 때문이다. 그것도 매우 헷갈리기 때문이다. 지금까지의 짧은 코딩 경력으로도 헷갈리는 코드는 좋지 못한 코드라는 것을 알 수 있었다. 연산자의 경우 "기호" 적인 부분을 재정의 하는 것이기 때문에, "기호"만으로 그 함수를 파악해야만 한다. 그런데 그 "기호"처럼 행동하지 않는다면, 어떻게 되겠는가? 다시 다 뜯어 봐야 할 것이다. 이것은 시간 낭비이다. 자신만 볼 코드이기 때문에 상관없다고 하자. 정말 자기 자신은 그 코드를 보고도 헷갈리지 않을 자신이 있을까? 자신이 만큼 코드라도 일주일간만 안보면, 새롭게 느껴지는게 이 쪽 세계인데, 정말 그럴지 의구심이 든다. "-" 연산자가 "-"의 의미를 지니지 않고, "+" 의 의미를 지닌다고 생각해 보면 쉽게 이해가 간다. 어쩔 수 없..
{ 이번 항목은 함수의 매개변수를 무엇으로 정하는게 좋을까? 란 말과 같다. 매개변수야 필요한 것을 필요한 만큼 인자로 만들면 되지 않을까? 라고 생각 할 수도 있겠지만, C++ 에선 "클래스" 라는 개념이 있기 때문에, 좀 까다로운 것들이 많이 있다. 예를 들자면, 자신의 복사 갯수를 카운팅하는 객체, 소유권 개념이 있는 객체, 스마트 포인터, 다른 것을 카운팅 하는 객체, 데이터 크기가 매우 큰 객체, 또는 매우 작은 객체, 복사 되지 않는 객체, 10개까지만 복사 되는 객체 등... 사용 상에 필요한 용도로 만들어진 이러한 객체들은 "함수의 매개변수로 어떻게 전달 할까?" 를 고민해 봐야 한다. 또는 함수 내부에서 변경될 수 있는가? 에 대한 고민도 같이 해서 const 를 붙여야 하는가? 말이야 ..
최근댓글