안녕하세요!
게시글
질문&답변
3.11 부동소수점형 질문입니다
안녕하세요? 질문&답변 도우미 durams입니다.부동 소수점의 지수(exponent) 부분을 나타내기 위한 표기법으로 두 가지를 생각할 수 있는데요, 첫 번째는 signed integer로 나타내는 것이고, 두 번째는 unsigned integer와 bias를 결합한 형태입니다.현재 거의 모든 곳에서 사용하는 부동 소수점 표준인 IEEE754에서는 두 번째 방식을 사용합니다. 간단히 말씀드리자면 나타내고자 하는 지수값에서 127이라는 bias 값(single precision인 경우)을 뺀 값을 unsigned integer 형태로 나타내는 것입니다.[-127, 128]라는 구간을 [0, 255]으로 바꿔서 표현한다고 보시면 될 것 같습니다. 다만 강의에서도 언급되듯이, exponent의 모든 비트가 0이거나 모든 비트가 1인 경우는 특수한 경우이기 때문에 사실 single precision에서 지수가 -127이거나 +128인 경우는 없습니다. 관심이 있으시다면 Normalized values, Denormalized values, Special values 같은 단어로 검색해보시길 바랍니다.
- 1
- 2
- 19
질문&답변
170강 유니크 포인터에대해 질문있습니다
안녕하세요? 질문&답변 도우미 durams입니다.아마 아래 부분에 대해서 질문해주신 것 같습니다.void doSomething2(Resource* res) { res->setAll(100); res->print(): }말씀하신 대로 이런 식으로 작성하게되면 포인터가 복사됩니다. 위 함수가 작동하는 동안에는 '객체에 대한 소유권을 여러 곳에서 가진다' 라고 말할 수 있겠죠.이는 강의에서 제시한 스마트 포인터 사용 시 함수에서 인자를 전달받을 수 있는 주요한 세 가지 방법 중 하나입니다.std::move를 통해 함수에게 소유권을 주고, 다시 돌려받기l-value reference를 전달하여 함수 내에서 참조를 통해 작업하기스마트 포인터 내 객체의 포인터를 직접적으로 전달하기 (위 코드)1번의 경우 함수 동작에 따라 소유권을 주고 돌려받지 않을 수도 있습니다. 실제로 소유권이 여러 곳을 이동하는 경우 쓰면 좋겠죠.2번은 소유권의 이동이 필요 없는 상태에서 해당 객체를 통해 작업하고 싶은 경우가 되겠습니다.3번은 사실 권장되지 않는 방식이라고 말씀드리고 싶습니다. 엄격한 소유권 관리를 위해 std::unique_ptr을 도입을 하더라도 정작 함수에 raw pointer를 전달하면 std::unique_ptr가 관리하는 소유권과 별개로 객체에 접근 가능한 '비인가된 우회로'가 생기는 것과 같습니다. 그러니 잠재적인 문제가 발생할 수도 있는 방식입니다. 물론 문법적으로는 허용됩니다.직접 사용해보시면서 일부러 문제를 발생시켜보는 것도 좋은 연습이 되실 듯 합니다.
- 1
- 1
- 27
질문&답변
섹션 5 퀴즈의 답이 이상합니다
안녕하세요? 질문&답변 도우미 durams입니다.말씀하신 내용이 맞습니다. 다만 정답으로 처리되는 문항은 프로그램 실행 속도가 느려집니다인데 반해 해설이 아래와 같이 나오는 것으로 보아, 문제의 오류라기보다는 정답 문항이 잘못 지정된 것으로 보입니다.(사진) 또한 각 섹션의 끝에 제공되는 퀴즈는 인프런 자체 업데이트를 통해 도입된 기능으로, 자동으로 AI를 통해 생성한 질문들입니다. 이는 교수님의 검수를 거친 상태가 아니므로 내용의 정확성에 부족함이 있을 수 있습니다. 참고용으로만 보시는 것을 추천드립니다.
- 1
- 2
- 24
질문&답변
read books함수 질문
안녕하세요? 질문&답변 도우미 durams입니다.말씀하신 둘의 동작은 같지 않습니다."%d%*c" : 정수 하나를 읽고, 아무 문자 하나를 읽고 버림."%d\n" : 정수 하나를 읽고, 공백 문자(whitespace character)가 나오지 않을 때까지 계속해서 입력을 받음.단순히 개행 문자를 버퍼에서 제거하고자 한다면 전자와 같이 작성하는 것이 좋습니다.
- 1
- 2
- 27
질문&답변
질문입니다
안녕하세요? 질문&답변 도우미 durams입니다.입출력 버퍼에 대한 설명이 등장하기 전이라 자세한 설명을 드리기 어렵기에 간단히 설명드리자면, 프로그램 실행 시 나타나는 콘솔 창은 프로그램이 출력하는 내용만이 나타나는 것이 아니라 사용자가 입력하는 문자들이 나타나는 곳이기도 합니다.개행 문자를 출력하도록 프로그래밍한 것과는 관계없이, 개행 문자를 입력하는 행위도 콘솔 창에서의 개행을 수행합니다.
- 1
- 2
- 38
질문&답변
질문입니다.
안녕하세요? 질문&답변 도우미 durams입니다.말씀해주신 부분은 해당 코드가 문제가 있다는 내용이 아닙니다. 실습하기 쉬운 방식으로 먼저 학습을 진행하겠다는 의미입니다.
- 1
- 1
- 31
질문&답변
이중포인터와 배열이 이해가 안됩니다.
안녕하세요? 질문&답변 도우미 durams입니다. int row = 3; int col = 5; int* r1 = new int[col] { 1, 2, 3, 4, 5 }; int* r2 = new int[col] { 6, 7, 8, 9, 10 }; int* r3 = new int[col] { 11, 12, 13, 14, 15 }; int** rows = new int* [row] { r1, r2, r3 };동적 할당을 이미 학습하셨으니 r1, r2, r3에 대해서는 이해하셨을겁니다. 이 세 포인터는 모두 new int[col]로 동적 할당을 진행하는데요, int를 col개만큼 담는 배열의 크기만큼을 힙에 할당했을 때 그 시작 주소를 가리키는 변수라는 의미가 됩니다.동일한 원리를 rows에 적용하면 new int* [row]를 통해 int*를 row개만큼 담는 배열의 크기만큼을 힙에 할당했을 때 그 시작 주소를 가리킨다는 의미가 됩니다.(사진)
- 1
- 2
- 48
질문&답변
5분 17~5분 34초 객체 잘림 질문
안녕하세요? 질문&답변 도우미 durams입니다.제가 예전에 썼던 글을 잘 봐주셨네요. '위의 설명들'은 맞는 내용입니다. 다만 언급해주신 5분 17초부터의 내용에 대해서는 조금 설명이 필요합니다.그렇다면 5 분 17초에서 임시 객체를 throw하고 있고 매개 변수는 참조의 형태를 가지고 있기 때문에 객체 잘림이라는 설명은 맞지 않고 다형성의 자식의 객체를 부모의 참조로 조작하는 경우인 것 아닌가요?: 아마 영상의 해당 부분에서 report 함수의 출력이 Exception report로 나온 이유가 객체 잘림 때문이 아닌 것 같아서 의문을 표하시는 것으로 보입니다.저도 질문자님의 글을 보고 영상을 다시 보면서 찾은 사실이지만, 결론부터 말씀드리자면 강의에 미묘한 오류가 있습니다. 제가 이전에 작성했던 글을 보셨으니 알고 계실 테지만, catch문에서 객체를 &(reference)로 잡았기 때문에 오히려 object slicing는 제대로 방지되고 있습니다.해당 부분에서 Array exception이 아닌 Exception report가 출력된 이유는 report 함수가 오버라이딩되지 않았기 때문입니다. 강의에서 사용하는 코드를 잠깐 보시면 아래와 같습니다.class Exception { public: void report() { cerr 강의에서도 report 함수를 오버라이딩했다고 소개하지만, 사실 이건 오바라이딩이 아닌 아무 관계가 없는 별개의 함수 정의라고 봐야합니다. 왜냐하면 Exception의 report에 virtual 키워드가 없기 때문입니다. 즉 다형성이 동작하지 않습니다. 런타임 다형성을 위한 v-table 정보가 생성되지 않으며, ArrayException 객체를 Exception& 에 할당해서 report를 호출하더라도 단순히 Exception::report가 호출됩니다.즉, 강의 코드대로 작성하면 catch(Exception& e)처럼 object slicing을 방지하도록 catch문을 작성한 것과 관계없이 애초에 런타임 다형성이 동작하는 형태가 아니기 때문에 Exception의 참조에서 호출한 report는 언제나 Exception report를 출력하게 됩니다.해결 방법은 진짜로 오버라이딩을 하면 됩니다.class Exception { public: virtual void report() { cerr 이렇게 하면 질문글에 첨부해주신 제 코드의 doSomething 내에서 catch했을 때 제대로 Array Exception report이 출력됩니다. 대신 main에서 catch해서 나오는 출력문은 그대로 Exception report인데요, 이건 왜 그런지 한 번 생각해보셨으면 좋겠습니다.질문은 이어서 주셔도 됩니다.
- 1
- 1
- 44
질문&답변
Resource.h 코드 알려주세요
안녕하세요? 질문&답변 도우미 durams입니다.166 15.1 이동의 의미와 스마트 포인터의 시작 부분을 보시면 Resource.h가 나오니 참고해주세요.
- 1
- 1
- 34
질문&답변
char name[] 배열의 길이와 관련해 일부 궁금점이 생겨서 질문합니다
안녕하세요? 질문&답변 도우미 durams입니다.name은 C-style 문자열로 널 문자를 포함하므로 길이인 n_name은 10입니다. 그리고 *p가 널 문자일 때 p에서 문자열의 시작 주소를 빼면 그 값은 널 문자를 제외한 문자열의 길이가 되겠지요.디버깅을 통해서 많은 걸 얻어가실 수 있으니 꼭 습관처럼 해 주세요.
- 1
- 2
- 43