728x90
반응형

c++ 71

C++ 함수 선언 끝에 "const"가 의미하는 것

질문 : 함수 선언 끝에 "const"는 무엇을 의미합니까? 다음과 같이 쓰여진 책이 있습니다. class Foo { public: int Bar(int random_arg) const { // code } }; 무슨 뜻이에요? 답변 const 로 표시되는 "const 함수"는이 클래스 함수가 클래스의 멤버 변수를 변경하는 것을 컴파일러 오류로 만듭니다. 그러나 함수 내부에서 클래스 변수를 읽는 것은 괜찮지 만이 함수 내부에 쓰면 컴파일러 오류가 발생합니다. 이러한 "const function"에 대해 생각하는 또 다른 방법은 암시 적 this 포인터를 사용하는 일반 함수로 클래스 함수를 보는 것입니다. 따라서 int Foo::Bar(int random_arg) 메서드 (끝에 const int Foo_B..

C++ 컴파일 / 링크 프로세스의 작동 원리

질문 : 컴파일 / 링크 프로세스는 어떻게 작동합니까? 컴파일 및 연결 프로세스는 어떻게 작동합니까? (참고 : 이것은 Stack Overflow의 C ++ FAQ에 대한 항목입니다.이 양식으로 FAQ를 제공하는 아이디어를 비판하고 싶다면이 모든 것을 시작한 메타에 게시 할 수 있습니다. 이 질문은 FAQ 아이디어가 처음 시작된 C ++ 채팅룸 에서 모니터링되므로 아이디어를 제안한 사람들이 답변을 읽을 가능성이 큽니다.) 답변 C ++ 프로그램의 컴파일에는 세 단계가 포함됩니다. 전처리 : 전처리 기는 C ++ 소스 코드 파일을 가져와 #include , #define 및 기타 전 처리기 지시문을 처리합니다. 이 단계의 출력은 전 처리기 지시문이없는 "순수한"C ++ 파일입니다. 컴파일 : 컴파일러는 전..

std :: vector에 대한 반복 : unsigned 변수와 signed 변수

질문 : std :: vector에 대한 반복 : 부호없는 색인 변수와 부호있는 색인 변수 C ++에서 벡터를 반복하는 올바른 방법은 무엇입니까? 다음 두 코드 조각을 고려하면이 코드는 잘 작동합니다. for (unsigned i=0; i < polygon.size(); i++) { sum += polygon[i]; } 그리고 이것: for (int i=0; i < polygon.size(); i++) { sum += polygon[i]; } warning: comparison between signed and unsigned integer expressions 를 생성합니다. 저는 C ++의 세계에 처음 왔기 때문에 unsigned 변수는 나에게 약간 무섭게 보이며 unsigned 변수가 위험 할 수 ..

rvalues, lvalues, xvalues, glvalues, prvalues 사용 방법

질문 : rvalues, lvalues, xvalues, glvalues 및 prvalues는 무엇입니까? C ++ 03에서 표현식은 rvalue 또는 lvalue 입니다. C ++ 11에서 표현식은 다음과 같을 수 있습니다. rvalue lvalue xvalue glvalue prvalue 2 개의 카테고리가 5 개의 카테고리가되었습니다. 이 새로운 범주의 표현은 무엇입니까? 이러한 새 범주는 기존 rvalue 및 lvalue 범주와 어떤 관련이 있습니까? C ++ 0x의 rvalue 및 lvalue 범주가 C ++ 03의 경우와 동일합니까? 이러한 새로운 카테고리가 필요한 이유는 무엇입니까? WG21 신들은 우리를 단순히 인간을 혼동시키려는 것일까 요? 답변 이 문서는 짧은 소개가 아닐 것 같습니다...

[C++] private, public 및 protected 상속의 차이점

질문 : 개인, 공용 및 보호 상속의 차이점 C ++ 에서 public , private 및 protected 상속의 차이점은 무엇입니까? 내가 찾은 모든 질문은 특정 사례를 다룹니다. 답변 이 질문에 답하기 위해 먼저 회원의 접근자를 제 말로 설명하고 싶습니다. 이미 알고있는 경우 "다음 :"제목으로 건너 뜁니다. 내가 알고있는 세 가지 접근자가 있습니다 : public , protected 및 private . 허락하다: class Base { public: int publicMember; protected: int protectedMember; private: int privateMember; }; Base 인식하는 모든 것은 Base publicMember 가 포함되어 있다는 것도 알고 있습니다...

Python보다 C ++에서 stdin에서 행을 읽는 것이 훨씬 느린 이유

질문 : Python보다 C ++에서 stdin에서 행을 읽는 것이 훨씬 느린 이유는 무엇입니까? Python과 C ++를 사용하여 stdin의 문자열 입력 행을 비교하고 싶었고 C ++ 코드가 동등한 Python 코드보다 훨씬 느리게 실행되는 것을보고 충격을 받았습니다. 내 C ++가 녹슬고 아직 Pythonista 전문가가 아니기 때문에 내가 뭘 잘못하고 있는지 또는 뭔가를 오해하고 있는지 알려주세요. (TLDR 답변 : cin.sync_with_stdio(false) 문을 포함하거나 fgets 사용하십시오. TLDR 결과 : 내 질문의 맨 아래로 스크롤하여 표를보십시오.) C ++ 코드 : #include #include using namespace std; int main() { string in..

C++ 에서 bool에 대한 printf 포맷 지정자

질문 : bool에 대한 printf 형식 지정자는 무엇입니까? ANSI C99부터 stdbool.h 를 통해 _Bool 또는 bool 있습니다. 그러나 printf 형식 지정자가 있습니까? 나는 그 의사 코드와 같은 것을 의미합니다. bool x = true; printf("%B\n", x); 다음과 같이 인쇄됩니다. true 답변 bool 유형에 대한 형식 지정자는 없습니다. 보다 짧은 모든 정수 계열 형식 때문에, int 로 승격됩니다 int 에 아래로 통과 할 때 printf() 의 가변 인수를 사용할 수 %d : bool x = true; printf("%d\n", x); // prints 1 그러나 왜 안 되는가 : printf(x ? "true" : "false"); 또는 더 나은 : pri..

Python에서 C / C ++ 호출

질문 : Python에서 C / C ++ 호출? C 또는 C ++ 라이브러리에 대한 Python 바인딩을 구성하는 가장 빠른 방법은 무엇입니까? (중요한 경우 Windows를 사용하고 있습니다.) 답변 Boost.Python을 봐야합니다. 다음은 웹 사이트에서 가져온 짧은 소개입니다. Boost Python Library는 Python과 C ++를 연결하기위한 프레임 워크입니다. 이를 통해 특수 도구없이 C ++ 컴파일러 만 사용하여 C ++ 클래스 함수 및 객체를 Python에 빠르고 원활하게 노출 할 수 있습니다. C ++ 인터페이스를 비 간섭 적으로 래핑하도록 설계되었으므로 래핑하기 위해 C ++ 코드를 전혀 변경하지 않아도되므로 Boost.Python은 타사 라이브러리를 Python에 노출하는 데..

C ++ 11에서 T &amp;&amp; (&&)가 의미하는 것

질문 : C ++ 11에서 T && (이중 앰퍼샌드)는 무엇을 의미합니까? T&& var 와 같은 변수를 선언 할 때 이중 앰퍼샌드를 발견했습니다. 우선이 짐승은 무엇이라고 불릴까요? Google에서 이와 같은 구두점 검색을 허용하기를 바랍니다. 정확히 무엇을 의미합니까? 언뜻보기에는 이중 참조 (예 : C 스타일 이중 포인터 T** var )로 보이지만 사용 사례를 생각하는 데 어려움을 겪고 있습니다. 답변 rvalue 참조 (표준 제안 문서)를 선언합니다. 다음은 rvalue 참조에 대한 소개입니다. 다음은 Microsoft의 표준 라이브러리 개발자 중 한 명이 작성한 rvalue 참조에 대한 환상적인 심층 분석입니다. 주의 : MSDN의 링크 된 문서 ( "Rvalue 참조 : VC10의 C ++ ..

C ++ 11 rvalue 및 이동 의미 혼란 (return 문)

질문 : C ++ 11 rvalue 및 이동 의미 혼란 (return 문) rvalue 참조를 이해하고 C ++ 11의 의미를 이동하려고합니다. 이 예제의 차이점은 무엇이며 어떤 것이 벡터 복사를하지 않을까요? 1번째 예제 std::vector return_vector(void) { std::vector tmp {1,2,3,4,5}; return tmp; } std::vector &&rval_ref = return_vector(); 2번째 예제 std::vector&& return_vector(void) { std::vector tmp {1,2,3,4,5}; return std::move(tmp); } std::vector &&rval_ref = return_vector(); 3번째 예제 std::vec..

C / C ++에 표준 부호 함수 (signum, sgn)를 사용하는 방법

질문 : C / C ++에 표준 부호 함수 (signum, sgn)가 있습니까? 음수에는 -1을, 양수에는 +1을 반환하는 함수를 원합니다. http://en.wikipedia.org/wiki/Sign_function 직접 작성하는 것은 쉽지만 어딘가에 표준 라이브러리에 있어야 할 것 같습니다. 편집 : 특히, 나는 수레에서 작동하는 기능을 찾고있었습니다. 답변 놀랍게도 아직 유형 안전 C ++ 버전을 게시 한 사람은 없습니다. template int sgn(T val) { return (T(0) < val) - (val < T(0)); } 혜택: 실제로 signum (-1, 0 또는 1)을 구현합니다. 여기서 copysign을 사용하는 구현은 signum이 아닌 -1 또는 1 만 반환합니다. 또한 여기..

#ifndef 및 #define이 C ++ 헤더 파일에서 사용되는 이유

질문 : #ifndef 및 #define이 C ++ 헤더 파일에서 사용되는 이유는 무엇입니까? 나는 일반적으로 헤더 파일의 시작 부분에서 다음과 같은 코드를 보았습니다. #ifndef HEADERFILE_H #define HEADERFILE_H 그리고 파일의 끝에는 #endif 이것의 목적은 무엇입니까? 답변 이를 #include 가드 라고합니다. 헤더가 포함되면 고유 값 (이 경우 HEADERFILE_H )이 정의되었는지 확인합니다. 그런 다음 정의되지 않은 경우 정의하고 나머지 페이지로 계속합니다. 코드가 다시 포함되면 첫 번째 ifndef 가 실패하여 빈 파일이 생성됩니다. 이는 유형, 열거 형 및 정적 변수와 같은 식별자의 이중 선언을 방지합니다. 출처 : https://stackoverflow...

C 또는 C ++를 사용하여 디렉토리의 파일 목록을 가져오는 방법

질문 : C 또는 C ++를 사용하여 디렉토리의 파일 목록을 어떻게 가져올 수 있습니까? 내 C 또는 C ++ 코드 내부에서 디렉토리의 파일 목록을 어떻게 확인할 수 있습니까? ls 명령을 실행하고 프로그램 내에서 결과를 구문 분석 할 수 없습니다. 답변 업데이트 2017 : C ++ 17에는 이제 파일 시스템의 파일을 나열하는 공식적인 방법이 있습니다 : std::filesystem . 이 소스 코드와 함께 Shreevardhan 의 훌륭한 답변이 아래에 있습니다. #include #include #include namespace fs = std::filesystem; int main() { std::string path = "/path/to/directory"; for (const auto & ent..

C ++ 11은 표준화 된 메모리 모델의 도입이 미치는 영향

질문 : C ++ 11은 표준화 된 메모리 모델을 도입했습니다. 무슨 뜻이에요? 그리고 그것이 C ++ 프로그래밍에 어떤 영향을 미칠까요? C ++ 11은 표준화 된 메모리 모델을 도입했지만 정확히 무엇을 의미합니까? 그리고 그것이 C ++ 프로그래밍에 어떤 영향을 미칠까요? 이 기사 ( Herb Sutter 를 인용 한 Gavin Clarke의 )는 다음과 같이 말합니다. 메모리 모델은 C ++ 코드가 이제 컴파일러를 만든 사람과 실행중인 플랫폼에 관계없이 호출 할 표준화 된 라이브러리를 가지고 있음을 의미합니다. 서로 다른 스레드가 프로세서의 메모리와 통신하는 방식을 제어하는 표준 방법이 있습니다. Sutter 는 "표준에있는 여러 코어로 [코드]를 분할하는 것에 대해 이야기 할 때 메모리 모델에 대..

C ++ 11에서 람다식이란?

질문 : C ++ 11에서 람다식이 란 무엇입니까? C ++ 11에서 람다식이 란 무엇입니까? 언제 사용합니까? 도입 전에는 불가능했던 문제의 종류는 무엇입니까? 몇 가지 예와 사용 사례가 유용 할 것입니다. 답변 std::for_each 및 std::transform 과 같은 유용한 일반 함수가 포함되어있어 매우 편리합니다. 안타깝게도 특히 적용하려는 펑터 가 특정 기능에 고유 한 경우 사용하기가 매우 번거로울 수 있습니다. #include #include namespace { struct f { void operator()(int) { // do something } }; } void func(std::vector& v) { f f; std::for_each(v.begin(), v.end(), f);..

C ++ 17의 새로운 기능

질문 : C ++ 17의 새로운 기능은 무엇입니까? C ++ 17은 이제 기능이 완전하므로 큰 변화가 없을 것입니다. C ++ 17에 대한 수백 개의 제안이 제출되었습니다. C ++ 17에서 C ++에 추가 된 기능은 무엇입니까? "C ++ 1z"를 지원하는 C ++ 컴파일러를 사용할 때 컴파일러가 C ++ 17로 업데이트 할 때 사용할 수있는 기능은 무엇입니까? 답변 언어 기능: 템플릿 및 일반 코드: 클래스 템플릿에 대한 템플릿 인수 추론 함수가 템플릿 인수를 추론하는 방식과 마찬가지로 이제 생성자는 클래스의 템플릿 인수를 추론 할 수 있습니다. http://wg21.link/p0433r2 http://wg21.link/p0620r0 http://wg21.link/p0512r0 template 모든 ..

gcc의 C / C ++ 소스에서 assembler output 얻는 방법

질문 : gcc의 C / C ++ 소스에서 어셈블러 출력을 어떻게 얻습니까? 어떻게해야합니까? 무언가가 어떻게 컴파일되는지 분석하고 싶다면 내 보낸 어셈블리 코드를 어떻게 얻을 수 있습니까? 답변 gcc (또는 g ++)에 -S 옵션을 사용합니다. gcc -S helloworld.c 이것은 helloworld.c를 통해 전 처리기 (cpp)를 실행하고 초기 컴파일을 수행 한 다음 어셈블러가 실행되기 전에 중지됩니다. helloworld.s 파일을 출력합니다. -o 옵션을 사용하여 출력 파일을 설정할 수 있습니다. gcc -S -o my_asm_output.s helloworld.c 물론 이것은 원본 소스가있는 경우에만 작동합니다. 결과 객체 파일 만있는 경우 대안 --disassemble 옵션 (또는 축..

C ++ 표준 int, long 유형의 크기 기준

질문 : C ++ 표준은 int, long 유형의 크기를 무엇으로 지정합니까? 기본 C ++ 유형의 크기에 대한 자세한 정보를 찾고 있습니다. 아키텍처 (16 비트, 32 비트, 64 비트)와 컴파일러에 따라 다르다는 것을 알고 있습니다. 하지만 C ++에 대한 표준이 있습니까? 32 비트 아키텍처에서 Visual Studio 2008을 사용하고 있습니다. 내가 얻는 것은 다음과 같습니다. char : 1 byte short : 2 bytes int : 4 bytes long : 4 bytes float : 4 bytes double: 8 bytes char , short , int , long , double , float (및 내가 생각하지 않은 다른 유형)의 크기를 나타내는 신뢰할 수있는 정보를 찾..

C ++ 컴파일이 오래 걸리는 이유

질문 : C ++ 컴파일이 왜 그렇게 오래 걸리나요? C ++ 파일을 컴파일하는 것은 C # 및 Java와 비교할 때 매우 오래 걸립니다. 일반적인 크기의 Python 스크립트를 실행하는 것보다 C ++ 파일을 컴파일하는 데 훨씬 더 오래 걸립니다. 현재 VC ++를 사용하고 있지만 모든 컴파일러와 동일합니다. 왜 이런거야? 내가 생각할 수있는 두 가지 이유는 헤더 파일을로드하고 전처리기를 실행하는 것이었지만 그것이 왜 그렇게 오래 걸리는지 설명 할 수없는 것 같습니다. 답변 몇 가지 이유 헤더 파일 모든 단일 컴파일 단위에는 수백 또는 수천 개의 헤더가 (1)로드되고 (2) 컴파일되어야합니다. 전처리 기가 헤더 컴파일 결과가 모든 컴파일 단위마다 다를 수 있도록 보장하기 때문에 일반적으로 모든 컴파일 ..

Collatz 추측을 테스트하기위한 C ++ 코드가 손으로 작성한 어셈블리보다 빠르게 실행되는 이유

질문 : Collatz 추측을 테스트하기위한 C ++ 코드가 손으로 작성한 어셈블리보다 빠르게 실행되는 이유는 무엇입니까? 이 두 가지 솔루션을 Project Euler Q14 , 어셈블리 및 C ++로 작성했습니다. 그들은 Collatz 추측 을 테스트하기 위해 동일한 무차별 대입 접근 방식을 구현합니다. 조립 솔루션은 다음과 같이 조립되었습니다. nasm -felf64 p14.asm && gcc p14.o -o p14 C ++는 다음과 같이 컴파일되었습니다. g++ p14.cpp -o p14 어셈블리, p14.asm : section .data fmt db "%d", 10, 0 global main extern printf section .text main: mov rcx, 1000000 xor rd..

C ++ 프로그래머가 'new'사용을 최소화해야하는 이유

질문 : C ++ 프로그래머가 'new'사용을 최소화해야하는 이유는 무엇입니까? std :: list 을 사용할 때 std :: string 으로 스택 오버플로 질문 메모리 누수를 우연히 발견 했으며 주석 중 하나는 다음 과 같이 말합니다. 사용을 중지 new 너무 많이. 당신이 한 곳에서 새로운 것을 사용한 이유를 볼 수 없습니다. C ++ 에서 값별로 객체를 생성 할 수 있으며 이는 언어 사용의 큰 장점 중 하나입니다. 힙에 모든 것을 할당 할 필요는 없습니다. 자바 프로그래머처럼 생각하지 마세요. 그게 무슨 뜻인지 잘 모르겠습니다. 왜 객체는 가능한 한 자주 C ++의 값으로 생성되어야하며 내부적으로 어떤 차이가 있습니까? 내가 답을 잘못 해석 했습니까? 답변 널리 사용되는 메모리 할당 기술에는 자..

확실한 C ++ 의 가이드 및 목록

질문 : 확실한 C ++ 책 가이드 및 목록 이 질문은 매년 출판되는 수십 권의 나쁜 C ++ 책 중에서 몇 가지 진주를 수집하려고합니다. 인터넷에서 찾아 볼 수있는 자습서에서 이동 중에 자주 선택되는 다른 프로그래밍 언어와 달리 잘 작성된 C ++ 책을 공부하지 않고 C ++를 빠르게 선택할 수있는 사람은 거의 없습니다. 이것을하기에는 너무 크고 복잡합니다. 사실, 너무 크고 복잡해서 아주 나쁜 C ++ 책 이 많이 있습니다. 그리고 우리는 나쁜 스타일에 대해 말하는 것이 아니라 눈에 띄게 명백한 사실적 오류를 자랑하고 엄청나게 나쁜 프로그래밍 스타일을 홍보하는 것과 같은 것입니다. 허용 된 답변을 편집하여 양질의 책 과 대략적인 기술 수준 을 제공하십시오. 가급적 C ++ 채팅방 에서 추가 내용을 논..

C 및 C ++에서 char를 int로 변환

질문 : C 및 C ++에서 char를 int로 변환 C 및 C ++에서 char 를 int 로 어떻게 변환합니까? 답변 수행하려는 작업에 따라 다릅니다. 값을 ASCII 코드로 읽으려면 다음과 같이 작성할 수 있습니다. char a = 'a'; int ia = (int)a; /* note that the int cast is not necessary -- int ia = a would suffice */ 문자 '0' -> 0 , '1' -> 1 등을 변환하려면 다음과 같이 쓸 수 있습니다. char a = '4'; int ia = a - '0'; /* check here if ia is bounded by 0 and 9 */ 설명 : a - '0' 은 ((int)a) - ((int)'0') 와 동일하며..

C ++에서 PI 상수를 사용하는 방법

질문 : C ++에서 PI 상수를 사용하는 방법 일부 C ++ 프로그램에서 PI 상수 및 삼각 함수를 사용하고 싶습니다. include 사용하여 삼각 함수를 얻습니다. 그러나이 헤더 파일에는 PI에 대한 정의가없는 것 같습니다. PI를 수동으로 정의하지 않고 어떻게 얻을 수 있습니까? 답변 일부 (특히 오래된) 플랫폼 (아래 설명 참조)에서는 다음을 수행해야 할 수 있습니다. #define _USE_MATH_DEFINES 그런 다음 필요한 헤더 파일을 포함합니다. #include pi 값은 다음을 통해 액세스 할 수 있습니다. M_PI 내 math.h (2014)에서는 다음과 같이 정의됩니다. # define M_PI 3.14159265358979323846 /* pi */ 그러나 더 많은 것을 위해 당..

C ++에서 포인터 변수와 참조 변수의 차이점

질문 : C ++에서 포인터 변수와 참조 변수의 차이점은 무엇입니까? 참조가 구문 적 설탕이라는 것을 알고 있으므로 코드를 읽고 쓰기가 더 쉽습니다. 그러나 포인터 변수와 참조 변수의 차이점은 무엇입니까? 답변 포인터를 다시 할당 할 수 있습니다. int x = 5; int y = 6; int *p; p = &x; p = &y; *p = 10; assert(x == 5); assert(y == 10); 참조는 다시 바인딩 될 수 없으며 초기화시 바인딩되어야합니다. int x = 5; int y = 6; int &q; // error int &r = x; 포인터 변수는 고유 한 ID를 가지고 있습니다. 단항 & sizeof 연산자로 측정 할 수있는 특정 공간입니다. 참조에서 이러한 연산자를 사용하면 참조가..

728x90
반응형