월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C++
3.7 33분 49초
안녕하세요?1001 1110를 unsigned integer로 생각하고 변환을 하게 되면128 + ~ 식으로 나온다고 하셨습니다. (32분 쯤)그런데33분 49초에 1001 1110 을 <사인드>라 가정하고 변환을 하면2^7 1 + 2^41 + 2^3*1 + 2^2*1 + 2^1*1 = 158 이렇게 나온다고 하셨는데이 방식은 1001 1110를 unsigned integer로 생각하고 변환한 것이 아닌가요?ㅠ선생님께서 잘못 말씀하신 건가요?ㅠ사인드라 생각하면 맨앞의 숫자 1이 숫자의 크기가 아닌 부호를 의미하기에 다르게 계산해야 하는 것으로 알고 있어서요ㅠㅠㅠㅠ
- 미해결홍정모의 따라하며 배우는 C++
13:10 IsEven, IsOdd 함수 선언 후 함수포인터 이용한 코드 질문
IsEven, IsOdd 함수 구현 후 함수 포인터 사용해서 my_array 배열의 짝수/홀수 요소만 출력하는데요.IsEven, IsOdd 함수에 강의에서 설명하신 else return false;를 안붙이면 (아래 코드 36, 40째 줄 주석처리) IsOdd를 포인터로 호출하면 정상동작, IsEven을 포인터로 호출하면 모든 요소가 출력됩니다. 둘다 이상동작해야할 것 같은데 IsEven만 이상동작 하는 이유가 뭔가요?? #include <iostream>#include <string>#include <array>#include <limits>#include <vector>#include <algorithm>using namespace std;int func() { return 5;}int goo() { return 10;}void printNumbers(const array<int, 10>& my_array) { for (auto element : my_array) { if (element % 2 == 0) cout << element << " "; } cout << endl;}void printNumber2(const array<int, 10>& my_array, bool Is_even) { for (auto element : my_array) { if (Is_even && element % 2 == 0) cout << element << " "; if (!Is_even && element % 2 == 1) cout << element << " "; } cout << endl;}bool IsEven(const int& number) { if (number % 2 == 0) return true; //else return false;}bool IsOdd(const int& number) { if (number % 2 == 1) return true; //else return false;}void printNumber3(const array<int, 10>& my_array, bool (*check_fcn)(const int&)) {//함수포인터 써서 IsEven, IsOdd 불러움 for (auto element : my_array) { if (check_fcn(element)==true) cout << element << " "; } cout << endl;}int main() { cout << func << endl; /*이렇게 함수를 출력하면(func()가 아님) 메모리 주소값이 나옴. 즉, 함수도 주소를 가지고 있음. 즉, 함수도 포인터 써서 주소만 가지고 이것저것 할 수 있음.*/ func(); int(* fcnptr)() = func; /*func()는 func 함수를 실행시켜서 결과값을 가져온다는 의미. func의 주소값을 fcnptr에 대입하려면 func만 쓰야함.*/ cout << fcnptr() << endl; //변수 카운터를 써서 참조하려면 (변수)를 썼었는데, 함수포인터는 뒤에 앞 말고 뒤괄호인건가? fcnptr = goo; cout << fcnptr() << endl; array<int, 10> my_array = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; printNumbers(my_array); cout << endl; printNumber2(my_array, true); printNumber2(my_array, false); cout << endl; printNumber3(my_array, IsEven); return 0;}
- 미해결홍정모의 따라하며 배우는 C++
4:16 함수포인터 활용 질문입니다.
변수 포인터를 활용하여 변수값을 참조하려면 포인터 앞에 *을 붙였는데요.같은 방식으로 함수 포인터를 활용하여 함수값을 참조하려면 포인터뒤에 괄호()를 붙이는 문법이라고 생각하면 되나요?? 아래 코드에서 주석처리한 28번째 줄입니다. #include <iostream>#include <string>#include <array>#include <limits>#include <vector>#include <algorithm>using namespace std;int func() { return 5;}int goo() { return 10;}int main() { cout << func << endl; /*이렇게 함수를 출력하면(func()가 아님) 메모리 주소값이 나옴. 즉, 함수도 주소를 가지고 있음. 즉, 함수도 포인터 써서 주소만 가지고 이것저것 할 수 있음.*/ func(); int(* fcnptr)() = func; /*func()는 func 함수를 실행시켜서 결과값을 가져온다는 의미. func의 주소값을 fcnptr에 대입하려면 func만 쓰야함.*/ cout << fcnptr() << endl; //변수 카운터를 써서 참조하려면 (변수)를 썼었는데, 함수포인터는 뒤에 앞 말고 뒤괄호인건가? fcnptr = goo; cout << fcnptr() << endl; return 0;}
- 해결됨홍정모의 따라하며 배우는 C++
3.6 논리연산자 9분30초
안녕하세요?9분 30초 부근에서 선생님께서 5가 불리언타입으로 트루(1)이므로 !x는 펄스(0)가 된다그리고 y가 불리언으로 강제 형변하게 되면 트루.여기서 헷갈리는 게 y는 왜 강제적으로 불리언으로 형변하게 되는 건가요?ㅠ!x는 펄스이자 0이기에 0 == 7 이렇게 비교하면 되는 줄 알았는데 선생님께서는 y도 불리언으로 바꿔서 False == True 이렇게 비교하게 된다고 하셔서요... 그리고 추가적으로 !x는 불리언 타입으로 바뀌던데 글머 ! 연산자는 인티저나 다른 타입을 불리언으로 한 번에 바꿔주는 기능을 갖고 있는 건가요?
- 미해결홍정모의 따라하며 배우는 C++
3.5강 9분 59초 쯤 d1과 d2의 값
안녕하세요?d1의 값은 100 - 99.99이고d2의 값은 10 - 9.99로 적으셨는데왜 둘 다 0.001인가요?ㅠㅠ전 계산하면 0.01 나오는데 선생님께서는 0.001로 진행하셔서요...ㅠㅠ
- 미해결홍정모의 따라하며 배우는 C++
cin.ignore에 입력값의 차이가 궁금합니다, cin.clear 후 ignore 또 해주는이유도 궁금합니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.int getInt(){cout << "Enter an integer number : ";int x;cin >> x;cin.ignore(32767,'\n');return x;} 위의 코드속 ignore에서 입력값(32767,'\n')을 안넣어줘도 버퍼는 지워지는걸로 알고있는데, 안넣어준뒤 cin에서 123공백123 을 넣어주면 다시 뒷부분 cin에 버퍼에 저장된 값이 들어갑니다. 왜 ignore에 입력값을 넣어주어야 하는건가요?? 또한 강의속에서 int 값에 너무 큰수가 들어갔을 떄를 대비하여 cin.clear로 버퍼를 비워준다하였는데 이미비워졌는데도 그뒤에 또 ignore을 사용하는 이유는 무엇인가요?
- 미해결홍정모의 따라하며 배우는 C++
cout << (bValue ? 1 : 0 ) <<"입니다"; 라는 코드에서 삼항연산자에 괄호 유무 차이에 따른 오류 질문입니다.
cout << (bValue ? 1 : 0 ) <<"입니다"; 라는 코드에서 삼항연산자에 괄호 유무 차이에 따른 오류 질문입니다.cout << bValue ? 1 : 0 라고 입력시 잘 동작하지만 삼항연산자 이후 endl이나 추가적인 문구를 추가해보니 오류가 발생합니다. 하지만 괄호로 묶었을 땐 정상 동작을 하는것을 보고 왜 괄호가 필요한지 의문이 생겨서 질문 남깁니다.
- 미해결홍정모의 따라하며 배우는 C++
공부 순서 관련 질문 드려도 될까요?
안녕하세요.저는 캐나다에서 college를 다니고 있는 학생입니다. 제가 영어가 부족하기도 하고 학교에서 해주는 설명이 부족하다는 느낌도 있어서 홍정모 선생님의 강의를 구매하면서 학교 수업을 같이 따라가고 있습니다.1학기때는 c를 structure까지 배웠습니다. 그래서 선생님 강의 45%정도까지 수강을 했구요. 2학기때는 c++을 template까지 들었습니다. 그래서 선생님 강의 70~80%까지 수강했습니다. 3학기에는 c++을 배우고 4학기에는 파이썬을 배운다고 하더라구요.지금 겨울학기가 끝나고 여름학기까지 2주간의 방학이 있습니다. 그리고 다음학기는 인턴쉽을 준비해야합니다. 그런데 제가 살고있는 지역에서는 c나 c++보다는 파이썬 훨씬 인턴을 구하기가 쉽다고 합니다. 그래서 선생님께서 강의하시는 파이썬 추월코스를 들을 생각을 하고 있습니다. 그런데 다음학기 학교 수업은 파이썬이 아니라 c++이기도 하고 아직 선생님의 c랑 c++ 수업을 다 못듣기도 해서 파이썬을 혼자 공부하는게 맞는건지 고민이 됩니다. 그리고 c를 50%이상 들으면 자료구조 수업을 들을 수 있는 이벤트도 있던데, 취업을 하려면 자료구조 공부도 많이 중요한 것으로 알고 있습니다. 그런데 college라 그런지 아직 자료구조 수업을 듣지 못해서 2주간의 방학동안 어떤 공부를 어떻게 해야할지 고민이 많아요.바쁘시겠지만 혹시 조언을 좀 구할 수 있을까요?3학기를 잘 따라갈 수 있게 template 이후의 c++수업을 완강하는게 좋을까요. 취업에 용이한 파이썬을 공부하는게 좋을까요. 얼마 듣지 못한 c수업을 마저 듣고 자료구조 수업을 듣는게 좋을까요?나이 먹고 외국에서 안되는 영어로 공부하다보니 조언을 구할 곳이 없고 주변에 같은 고민을 하는 친구도 없어 여기에 이렇게 질문 올려봅니다.혹시 강의 관련 질문이 아니라 여기에 이런 질문을 올리는게 안된다면 미리 죄송합니다.
- 미해결홍정모의 따라하며 배우는 C++
링크가 안됩니다
아래 코드 진행하면 clang: error: linker command failed with exit code 1 (use -v to see invocation)이런 메세지가 뜹니다. ## head.h #pragma once // global constant namespace Constants { const double pi(3.141592); const double gravity(9.8); // ... } ---- ## test.cpp #include <iostream> #include "head.h" using namespace std; void dosomething2() { cout << "in test" << Constants::gravity << " " << &Constants::gravity << endl; } --- ## main.cpp #include <iostream> #include "head.h" using namespace std; void doSomething2(); int main() { cout << "in main" << Constants::gravity << " " << &Constants::gravity << endl; doSomething2(); }원인을 모르겠습니다 ㅠㅠ
- 미해결홍정모의 따라하며 배우는 C++
강의에 대한 질문검색 / 연습문제 답안 검색 방법 등 질문
특정회차의 강의에 대한 질문들을 모아서 보고 싶은데 그런기능이 있나요? 예컨대 3.9 강의에 대한 질문만 보는 방법 있나요?가끔씩 연습문제를 주시는데 답을 따로 올려주시나요?수강생에게 제공되는 강의자료가 따로 있나요?
- 해결됨홍정모의 따라하며 배우는 C++
15.4 std::move 관련
14:05쯤 18, 19행 operator 오버로딩이 다르다고 직접 디버거로 찍어보라고 하셨는데, 디버거에서 어떻게 확인해야하는지 모르겠습니다. (std::move에 들어가서 볼 수 있을 줄 알았는데 제가 못 찾는건지 확인이 어려워서요...) 11:00쯤 v.push_back(str);과v.push_back(std::move(str)); 을 비교한 것처럼,오버로딩된 함수를 사용하는 것(하나는 l-value로 parameter를 받고 하나는 r-value로 parameter를 받는)을 말씀하시는 것 같은데17행의 parmeter로 들어온 b도 l-value,18행의 지역변수인 tmp도 l-value 아닌가요?아니면 b는 T&로 받아오고, tmp는 T로 받아서 오버로딩되었다는 뜻인가요?
- 미해결홍정모의 따라하며 배우는 C++
15.3에서 생성자, 복사 대입 연산자 관련
(이미지가 잘 안 보여서 저장해서 보셔야할 것 같습니다)이동 생성자 설명 전 강의 초반에 복사 생성자를 사용하면 어떻게 되는지 보여주시는데 이해가 잘 안 돼서 디버거를 사용해보았습니다.제가 이해한대로 적어봤는데, 혹시 잘못 이해한 부분이 있다면 설명 부탁드립니다.그리고 이미지에도 적어두었듯이 맨 첫줄에서 왜 Resource default construct는 호출되지 않은 것인지 궁금합니다! 다른 질문자들에게 달아주신 답변들도 참고하며 공부하고 있습니다. 감사합니다.
- 미해결홍정모의 따라하며 배우는 C++
헤더파일 include 질문있습니다.
string 헤더파일을 include 해주지않아도 string 클래스와 멤버함수들까지 에러없이 컴파일되고 실행이 되는 이유를 모르겠습니다 ㅠㅠ 네임스페이스 때문인가 해서 4번줄 주석처리하고 std::string a3 = "hello";를 해도 마찬가지로 문제없이 컴파일이 되네요.. 요즘 컴파일러가 똑똑하다(?)라는말이 이런데서 나오는 걸까요??
- 해결됨홍정모의 따라하며 배우는 C++
비동기 프로그래밍 관련 질문입니다.
int main() { // future and promsise { std::promise<int> prom; auto future = prom.get_future(); auto t = std::thread([](std::promise<int>&& prom) { prom.set_value(1 + 2); }, std::move(prom)); cout << future.get() << endl; t.join(); } }이건 수업중 코드입니다.살짝 햇갈려서 구글링으로 이것저것 검색해보던중https://modoocode.com/284이 사이트의 설명을 읽다가 몇가지 질문 남겨봅니다.링크에서 std::promise 와 std::future 부분입니다. 1.cout << future.get() << endl; 여기서 작업한 값들이 promise객체의 인스턴스에 저장되어 있고 이를 돌려받아야되는데 promise객체의 인스턴스에 대한 언급없이 딸랑 get()만 쓰면 promise객체의 인스턴스로부터 돌려받는다는것을 어떻게 알 수 있나요? std::future<string> data = p.get_future();이 부분에서 약속을 했으니 그냥 get함수하면 알아서 promise객체로부터 값을 받아오고 출력까지 하는건가요? 그냥 이렇게 이해하면 되는건가요? 2.1번질문의 연장선입니다.get을 한번 더 쓰면 오류가 나는 이유가 저 링크에 의하면future 에서 get 을 호출하면, 설정된 객체가 이동 하기 때문에 절대로 get 을 두 번 호출하면 안됩니다. 라던데 이게 무슨말인가요?get함수는 그냥 값을 받아오는건데 객체가 이동한다는건 뭔가요?? 3.연산수행후 돌려줄 내부 객체 타입을 정하고연산이 끝나면 future 객체에 값을 전달함. 값을 전달할 future객체는 get_future함수를 통해 설정함.여기까진 이해가 되었는데 그럼 get함수는 (1). 전달받은 값을 출력하는 함수다.get함수 호출전에 자동으로 값은 promise객체에서 future객체로 넘어간다.(2).promise객체로부터 future객체가 값을 전달받는 행위 자체를 하는 future객체의 함수다.get함수 호출전엔 값이 안넘어간다. (1),(2) 둘 중 어느것에 해당되나요?이걸 제가 왜 햇갈려서 질문드리냐면 링크를 밑으로 살짝 내려보시면 p->set_value("some data");위와 같이 promise 객체가 자신의 future 객체에 데이터를 제공한 후에; 이부분이 이해하기 애매해서 질문드립니다.저부분은 객체에 데이터를 제공하는게 아니라 그냥 promise 객체의 인스턴스에 값을 입력하는 과정이지 않습니까? 질문이 좀 난잡한점 양해부탁드립니다.
- 미해결홍정모의 따라하며 배우는 C++
10:11 코드 질문입니다.
참조에 의한 값을 반환받는 함수를 이용해 역시 참조를 이용해 변수를 선언하면 함수가 끝나면서 사라지는 인자를 참조하므로 두번 출력하면 쓰레기값이 나온다고 설명해주셧는데요. Visual Studio 2019에서는 몇번을 출력해도 제대로 나오고 있습니다. 왜그런 건가요??아래 코드 46~55줄 입니다. #include <iostream>#include <limits>#include <array>#include <vector>#include <algorithm>using namespace std;//정수를 반환받는 경우int getValue(int x) { int value = x * 2; return value;}int* getValue2(int x) { int value = x * 3; return &value;}int* allocateMemory(int size) { return new int[size];}//reference로 반환int& getValue3(int x) { int value = x * 4; return value;}int main() { int value = getValue(3); int value2 = *getValue2(3); /*dereferencing해서 받는건 문제는 없으나 권장하지 않음 15~17의 value는 getValue2를 벗어나면서 사라지는데, 그 사라지는 변수의 주소값을 dereferencing하는건 위험 빌드해보면 값은 나오나 warning 뜸. 그렇다고 변수에 dereferencing은 더 위험. getValue2를 벗어나면서 사라지는 값의 주소값을 인자로 받는 값을 또 dereferencing 하는거니까 이 방법은 잘 안쓰긴 함. 단, 아래와 같이 배열의 동적할당에는 자주 씀. factory pattern이라고 나중에 배움.*/ int* array = allocateMemory(1024); //int *array = new int[1024];와 동일 //대신, 동적 할당이므로 delete해줘야하는데 delete가 allocateMemory 함수 말고 main 함수에 있어야해서 단점임. delete[] array; int value3 = getValue3(5);//getValue3이 반환하는 레퍼런스가 가리키는 실제 값이 value3로 복사해 들어옴. int& value4 = getValue3(5); //이거는 문제. value4는 getValue3가 끝나면 사라지는 26번째 줄의 value를 참조함 //없어지는 변수의 값을 복사해서 가져오는 value3는 괜찮은데, 없어지는 변수를 직접 참조하는 value4는 문제겠지 //그 얘로 두번 출력해보면 한번은 제대로 나오는데 다음은 쓰레기값 나옴. 지워진 값의 주소를 참조하니까. cout << value3 << endl; cout << value3 << endl; cout << value4 << endl; cout << value4 << endl; cout << value4 << endl; return 0;}
- 미해결홍정모의 따라하며 배우는 C++
6.17강의 중 2:40 질문있습니다.
for 문을 보다 예전 c++강의 자료나 책을 보면 선생님 처럼 코드를 구현하시던데, 실무에서도 자주쓰이는지 개인적으로 궁금해서 질문드립니다.//c++ style for(auto n : test) //c style for(int i = 0; i < 5; i++) 제가 직접 찾아본 바로는 현재 Microsoft 공식 홈페이지에서도 c 스타일인 방식으로 구현을 해놓은 것으로 확인했는 데, 실제로 어떤 방식을 자주 사용하나요??
- 미해결홍정모의 따라하며 배우는 C++
[오류] 불완전한 형식은 사용할 수 없습니다.
array<int, 5> my_arr = {1,2,3,4,5};선언에서 my_arr의 빨간줄이 그어지고 불완전한 형식은 사용할 수 없습니다.(error code : E0070)my_arr은 정의되지 않은 class std::array<int, 5>를 사용합니다. 에러가 뜨는데 이유가 무엇일까요....
- 미해결홍정모의 따라하며 배우는 C++
6.9 포인터 연산과 배열 인덱 ++ptr 로 풀어보았습니다.
#include <iostream> using namespace std; int main() { char name[] = "Jack jack"; char* ptr = name; const int n_name = sizeof(name) / sizeof(char); while (*ptr != '\0') { cout << *(ptr) << '\t' << static_cast<int>(*ptr) << endl; ++ptr; } return 0; }
- 미해결홍정모의 따라하며 배우는 C++
6.2 강의 듣는 중 질문있습니다
void doSomething(int students_scores[3])int main(){...doSomething(students_scores)}이 함수 내 파라미터에 궁금증이생겼는 데요. 기본적으로 c언어를 공부를 했는 데, 저는 메인 함수내부에 배열을 넘겨 받는 함수를 만들때는 포인터로 선언을 해서 받았는 데, 해당 영상에서는 저렇게 해도 작동된다는 것을 보고, 조금 궁금한 점이 생겼습니다. doSomething함수의 파라미터도 포인터로 된다고 하셨는 데, 그럼 [3] 괄호안에 있는 숫자는 뭘의미하는 건가요??int (*students_score)[3] 이것인가요??(int 형 자료를 가진 포인터 변수 3개) 조금 헷갈려서 질문 남깁니다.ps. 아 그리고 마지막으로 저런식으로도 사용하는 사람들이 좀 있는 편인가요??
- 미해결홍정모의 따라하며 배우는 C++
9: 40초경 내용 제가 생각한게 맞나요
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.list[3] = 10; 은 주소값에 10이 들어가버리니깐 not ok 인거고 (*list)[3] = 10; 은 포인터 list를 *이 dereferencing 해주고 그 해준 어레이의 4번째 공간에 10 값을 대입하는것같은데 제가 맞게 이해한건가요?