728x90
반응형

프로그래밍 언어/C++ 82

C ++에서 다른 생성자 (생성자 체인)에서 생성자를 호출 하는 방법

질문 : C ++에서 다른 생성자 (생성자 체인)에서 생성자를 호출 할 수 있습니까? C # 개발자로서 저는 생성자를 통해 실행하는 데 익숙합니다. class Test { public Test() { DoSomething(); } public Test(int count) : this() { DoSomethingWithCount(count); } public Test(int count, string name) : this(count) { DoSomethingWithName(name); } } C ++에서이 작업을 수행하는 방법이 있습니까? 클래스 이름을 호출하고 'this'키워드를 사용해 보았지만 둘 다 실패했습니다. 답변 C ++ 11 : 예! C ++ 11 이상에는 이와 동일한 기능 ( 위임 생성자 라..

이 프로그램이 세 개의 C ++ 컴파일러에서 잘못 거부 된 이유

질문 : 이 프로그램이 세 개의 C ++ 컴파일러에서 잘못 거부 된 이유는 무엇입니까? 내가 작성한 C ++ 프로그램을 컴파일하는 데 어려움이 있습니다. 이 프로그램은 매우 간단하며 내가 아는 한 C ++ 표준에 명시된 모든 규칙을 준수합니다. 확실히하기 위해 ISO / IEC 14882 : 2003 전체를 두 번 읽었습니다. 프로그램은 다음과 같습니다. 다음은 Visual C ++ 2010으로이 프로그램을 컴파일하려고 할 때받은 출력입니다. c:\dev>cl /nologo helloworld.png cl : Command line warning D9024 : unrecognized source file type 'helloworld.png', object file assumed helloworld.pn..

32 비트 루프 카운터를 64 비트로 대체하면 Intel CPU에서 _mm_popcnt_u64의 성능 편차가 발생합니다.

질문 : 32 비트 루프 카운터를 64 비트로 대체하면 Intel CPU에서 _mm_popcnt_u64의 성능 편차가 발생합니다. 대규모 데이터 배열 popcount 하는 가장 빠른 방법을 찾고있었습니다. 매우 이상한 효과가 발생했습니다. 루프 변수를 unsigned 에서 uint64_t 로 변경하면 내 PC에서 성능이 50 % 저하되었습니다. #include #include #include int main(int argc, char* argv[]) { using namespace std; if (argc != 2) { cerr

POSIX를 사용하여 C ++에서 명령을 실행하고 명령의 출력을 얻는 방법

질문 : POSIX를 사용하여 C ++에서 명령을 실행하고 명령의 출력을 얻으려면 어떻게해야합니까? C ++ 프로그램 내에서 실행될 때 명령의 출력을 얻는 방법을 찾고 있습니다. system() 함수를 사용해 보았지만 명령 만 실행합니다. 내가 찾고있는 것의 예는 다음과 같습니다. std::string result = system("./some_command"); 임의의 명령을 실행하고 출력을 얻어야합니다. boost.org를 살펴 보았지만 필요한 것을 얻을 수있는 것을 찾지 못했습니다. 답변 676 #include #include #include #include #include #include std::string exec(const char* cmd) { std::array buffer; std::s..

new를 사용하여 C ++에서 2차원 배열을 선언하는 방법

질문 : new를 사용하여 C ++에서 2D 배열을 어떻게 선언합니까? new를 사용하여 2D 배열을 어떻게 선언합니까? "일반"배열의 경우 다음과 같이합니다. int* ary = new int[Size] 그러나 int** ary = new int[sizeY][sizeX] a) 작동 / 컴파일하지 않고 b) 다음을 수행하지 않습니다. int ary[sizeY][sizeX] 그렇습니다. 답변 행 길이가 컴파일 시간 상수 인 경우 C ++ 11은 auto arr2d = new int [nrows][CONSTANT]; 이 답변을 참조하십시오. C ++의 확장으로 가변 길이 배열을 허용하는 gcc와 같은 컴파일러는 여기에 표시된대로 new 를 사용하여 C99에서 허용하는 것과 같은 완전한 런타임 가변 배열 차원..

__name__ == “__main__”: 하면 어떻게 될까?

질문 : __name__ ==“__main__”:하면 어떻게됩니까? 다음 코드가 주어지면 if __name__ == "__main__": do? # Threading example import time, thread def myfunction(string, sleeptime, lock, *args): while True: lock.acquire() time.sleep(sleeptime) lock.release() time.sleep(sleeptime) if __name__ == "__main__": lock = thread.allocate_lock() thread.start_new_thread(myfunction, ("Thread #: 1", 2, lock)) thread.start_new_thread(..

정렬되지 않은 배열을 처리하는 것보다 정렬 된 배열을 처리하는 것이 더 빠른 이유

질문 : 정렬되지 않은 배열을 처리하는 것보다 정렬 된 배열을 처리하는 것이 더 빠른 이유는 무엇입니까? 다음은 매우 특이한 동작을 보여주는 C ++ 코드입니다. 이상한 이유로 데이터를 기적적으로 정렬하면 코드가 거의 6 배 빨라집니다. #include #include #include int main() { // Generate data const unsigned arraySize = 32768; int data[arraySize]; for (unsigned c = 0; c < arraySize; ++c) data[c] = std::rand() % 256; // !!! With this, the next loop runs faster. std::sort(data, data + arraySize); // ..

C ++ 코드 파일 확장자 .cc와 .cpp의 차이점

질문 : C ++ 코드 파일 확장자? .cc와 .cpp의 차이점은 무엇입니까? .cc 및 .cpp 파일로 저장된 C ++ 코드를 보았습니다. 둘 사이에 차이점이 있습니까? Google 스타일 가이드 .cc 를 제안하는 것처럼 보이지만 설명을 제공하지 않습니다. 주로 Linux 시스템의 프로그램에 관심이 있습니다. 답변 결국 C ++ 컴파일러는 두 형식의 파일을 다룰 수 있기 때문에 문제가되지 않습니다. 팀 내에서 진짜 문제라면 동전을 던지고 실제 작업으로 넘어갑니다. 출처 : https://stackoverflow.com/questions/1545080/c-code-file-extension-what-is-the-difference-between-cc-and-cpp

C ++에서 구조체와 클래스의 차이점

질문 : C ++에서 구조체와 클래스의 차이점은 무엇입니까? 이 질문은 이미 C # /. Net 컨텍스트에서 요청되었습니다 . 이제 C ++에서 구조체와 클래스의 차이점을 배우고 싶습니다. OO 디자인에서 기술적 인 차이점과 둘 중 하나를 선택하는 이유에 대해 논의하십시오. 분명한 차이점부터 시작하겠습니다. public: 또는 private: 지정하지 않으면 구조체의 멤버는 기본적으로 public입니다. 클래스의 멤버는 기본적으로 비공개입니다. C ++ 사양의 모호한 모서리에서 다른 차이점을 찾을 수 있다고 확신합니다. 답변 클래스와 구조체의 까다로운 두 번째 차이점을 잊었습니다. 표준 (C ++ 98에서 C ++ 11까지의 §11.2.2) : 도출 된 클래스 구조체를 선언하고 개인이 클래스는 클래스를 ..

C ++ 표준은 초기화되지 않은 bool이 프로그램을 충돌시키는 것을 허용할까?

질문 : C ++ 표준은 초기화되지 않은 bool이 프로그램을 충돌시키는 것을 허용합니까? C ++의 "정의되지 않은 동작" 은 컴파일러가 원하는 모든 작업을 수행 할 수 있도록 허용합니다. 그러나 코드가 충분히 안전하다고 생각했기 때문에 놀랐던 충돌이 발생했습니다. 이 경우 실제 문제는 특정 컴파일러를 사용하는 특정 플랫폼에서만 발생했으며 최적화가 활성화 된 경우에만 발생했습니다. 문제를 재현하고 최대한 단순화하기 위해 여러 가지를 시도했습니다. 다음은 Bool 매개 변수를 취하고 문자열 true 또는 false 를 기존 대상 버퍼에 Serialize 라는 함수의 추출입니다. 이 함수가 코드 검토에 포함되어 있습니까? 실제로 bool 매개 변수가 초기화되지 않은 값인 경우 충돌이 발생할 수 있다는 것을..

최신 C ++ 11 / C ++ 14 / C ++ 17 및 향후 C ++ 20에서 열거 형 문자열

질문 : 최신 C ++ 11 / C ++ 14 / C ++ 17 및 향후 C ++ 20에서 열거 형 문자열 2008 c C ++ 열거 형을 문자열로 변환하는 간단한 방법이 있습니까? 2008 c C에서 enum 유형의 변수를 문자열로 사용하는 쉬운 방법? 2008 C ++ C ++ 열거 형을 문자열에 쉽게 매핑하는 방법 2008 C ++ 무언가를 C 식별자와 문자열로 만드는가? 2008 C ++ C ++ 열거 형을 문자열로 변환하는 간단한 스크립트가 있습니까? 2009 C ++ C ++에서 열거 형을 플래그로 사용하는 방법은 무엇입니까? 2011 C ++ 열거 형 변수를 문자열로 변환하는 방법은 무엇입니까? 2011 C ++ 열거 형에서 문자열로 C ++ 2011 C ++ 열거 형 변수를 문자열로 변환하..

C ++에서 'struct'와 'typedef struct'의 차이점

질문 : C ++에서 'struct'와 'typedef struct'의 차이점은 무엇입니까? C ++ 에서는 다음과 같은 차이점이 있습니까? struct Foo { ... }; 과: typedef struct { ... } Foo; 답변 C ++에서는 미묘한 차이 만 있습니다. 그것은 차이를 만드는 C로부터의 홀드 오버입니다. C 언어 표준 ( C89 §3.1.2.3 , C99 §6.2.3 및 C11 §6.2.3 )은 태그 식별자 ( struct / union / enum ) 및 일반 식별자 ( typedef )를 포함하여 다양한 범주의 식별자에 대해 별도의 네임 스페이스를 요구합니다. 및 기타 식별자). 방금 말한 경우 : struct Foo { ... }; Foo x; Foo 는 태그 네임 스페이스에..

C ++에서 배열 사용 방법

질문 : C ++에서 배열을 어떻게 사용합니까? 거의 모든 곳에서 사용되는 C에서 C ++ 상속 배열. C ++는 사용하기 쉽고 오류가 덜 발생하는 추상화를 제공하므로 ( std::vector C ++ 98 이후 및 std::array C ++ 11 이후) 배열이 필요하지 않습니다. C 에서처럼 자주 발생합니다. 그러나 레거시 코드를 읽거나 C로 작성된 라이브러리와 상호 작용할 때 배열의 작동 방식을 확실히 파악해야합니다. 이 FAQ는 다섯 부분으로 나뉩니다. 유형 수준의 배열 및 요소 액세스 배열 생성 및 초기화 할당 및 매개 변수 전달 다차원 배열 및 포인터 배열 배열 사용 시 일반적인 함정 이 FAQ에서 중요한 것이 누락되었다고 생각되면 답변을 작성하고 여기에 추가 부분으로 링크하십시오. 다음 텍스..

C ++에서 문자열을 토큰화 하는 방법

질문 : C ++에서 문자열을 어떻게 토큰화 합니까? Java에는 편리한 분할 방법이 있습니다. String str = "The quick brown fox"; String[] results = str.split(" "); C ++에서이 작업을 수행하는 쉬운 방법이 있습니까? 답변 C ++ 표준 라이브러리 알고리즘은 콘크리트 컨테이너가 아닌 반복자를 기반으로하는 매우 보편적입니다. split 기능을 제공하기가 어렵습니다. 비록 아무도 이것이 편리하다고 주장하지 않더라도 말입니다. 그러나 반환 유형은 무엇입니까? std::vector ? 그럴 수도 있지만 (잠재적으로 중복되고 비용이 많이 드는) 할당을 수행해야합니다. 대신 C ++는 임의적으로 복잡한 구분 기호를 기반으로 문자열을 분할하는 다양한 방법을 ..

dash를 제외한 문자열에서 영숫자가 아닌 모든 문자를 제거하는 방법

질문 : 대시를 제외한 문자열에서 영숫자가 아닌 모든 문자를 제거하려면 어떻게합니까? 대시 및 공백 문자를 제외하고 문자열에서 영숫자가 아닌 모든 문자를 제거하려면 어떻게합니까? 답변 [^a-zA-Z0-9 -] 를 빈 문자열로 바꿉니다. Regex rgx = new Regex("[^a-zA-Z0-9 -]"); str = rgx.Replace(str, ""); 출처 : https://stackoverflow.com/questions/3210393/how-do-i-remove-all-non-alphanumeric-characters-from-a-string-except-dash

C ++에서 클래스와 구조체 사용시기

질문 : C ++에서 언제 클래스와 구조체를 사용해야합니까? 어떤 시나리오에서 C ++에서 struct 대 class 를 사용하는 것이 더 낫습니까? 답변 C ++에서 class 와 struct 의 차이점은 다음과 같습니다. struct 멤버와 기본 클래스 / 구조체는 기본적으로 public class 멤버와 기본 클래스 / 스트럿은 기본적으로 private 클래스와 구조체는 모두 public , protected 및 private 멤버를 혼합하여 가질 수 있으며 상속을 사용할 수 있으며 멤버 함수를 가질 수 있습니다. 추천합니다 : 클래스와 유사한 기능이없는 일반 오래된 데이터 구조에 struct 를 사용하십시오. private 또는 protected 멤버, 기본이 아닌 생성자 및 연산자 등과 같은 기..

C / C ++에서 "->"연산자가 의미하는 것

질문 : C / C ++에서 "->"연산자는 무엇입니까? comp.lang.c++.moderated 에서 Hidden Features and Dark Corners of C ++ / STL 을 읽은 후 다음 코드 조각이 Visual Studio 2008과 G ++ 4.4에서 컴파일되고 작동한다는 사실에 완전히 놀랐습니다. 코드는 다음과 같습니다. #include int main() { int x = 10; while (x --> 0) // x goes to 0 { printf("%d ", x); } } 산출: 9 8 7 6 5 4 3 2 1 0 GCC에서도 작동하기 때문에 이것이 C라고 가정합니다. 이것이 표준에서 정의 된 위치와 출처는 어디입니까? 답변 --> 은 연산자가 아닙니다. 실제로 두 개의 개..

전체 ASCII 파일을 C ++ std :: string [duplicate]로 읽기

질문 : 전체 ASCII 파일을 C ++ std :: string [duplicate]로 읽기전체 파일을 메모리로 읽어서 C ++ std::string 에 배치해야합니다.char[] 로 읽으면 대답은 매우 간단합니다.std::ifstream t; int length; t.open("file.txt"); // open input file t.seekg(0, std::ios::end); // go to the end length = t.tellg(); // report location (this is the length) t.seekg(0, std::ios::beg); // go back to the beginning buffer = new char[length]; // allocate memory for ..

문자열에 C ++의 문자열이 포함되어 있는지 확인

질문 : 문자열에 C ++의 문자열이 포함되어 있는지 확인std::string 유형의 변수가 있습니다. std::string 포함되어 있는지 확인하고 싶습니다. 어떻게할까요?문자열이 있으면 true를 반환하고 그렇지 않으면 false를 반환하는 함수가 있습니까?답변std::string::find 를 다음과 같이 사용하십시오.if (s1.find(s2) != std::string::npos) { std::cout

.CPP 파일에 C ++ 템플릿 함수 정의 저장

질문 : .CPP 파일에 C ++ 템플릿 함수 정의 저장헤더에 인라인 대신 CPP 파일에 저장하고 싶은 템플릿 코드가 있습니다. 어떤 템플릿 유형이 사용 될지 아는 한 이것이 가능하다는 것을 알고 있습니다. 예를 들면 :.h 파일class foo { public: template void do(const T& t); }; .cpp 파일template void foo::do(const T& t) { // Do something with t } template void foo::do(const int&); template void foo::do(const std::string&); 마지막 두 줄에 유의하십시오. foo :: do 템플릿 함수는 int 및 std :: strings에서만 사용되므로 이러한 정의..

C ++에서 POD 유형이란?

질문 : C ++에서 POD 유형은 무엇입니까? 이 용어 POD 유형을 몇 번 보았습니다. 무슨 뜻이에요? 답변 POD 는 Plain Old Data를 의미합니다. 즉, 생성자, 소멸자 및 가상 멤버 함수가없는 class struct 또는 키워드 class로 정의되었는지 여부)입니다. POD에 대한 Wikipedia의 기사 는 좀 더 자세히 설명하고 다음과 같이 정의합니다. C ++의 Plain Old Data Structure는 PODS 만 멤버로 포함하고 사용자 정의 소멸자, 사용자 정의 복사 할당 연산자 및 멤버 포인터 유형의 비 정적 멤버가없는 집계 클래스입니다. C ++ 98 / 03에 대한이 답변 에서 더 자세한 내용을 찾을 수 있습니다. C ++ 11은 POD를 둘러싼 규칙을 변경하여 크게 ..

C ++에서 현재 시간과 날짜를 얻는 방법

질문 : C ++에서 현재 시간과 날짜를 얻는 방법은 무엇입니까? C ++에서 현재 날짜와 시간을 가져 오는 크로스 플랫폼 방법이 있습니까? 답변 C ++ 11에서는 std::chrono::system_clock::now() 예 ( en.cppreference.com 에서 복사) : #include #include #include int main() { auto start = std::chrono::system_clock::now(); // Some computation here auto end = std::chrono::system_clock::now(); std::chrono::duration elapsed_seconds = end-start; std::time_t end_time = std::chr..

C와 C ++ 모두에서 유효한 코드가 각 언어로 컴파일 될 때 다른 동작을 생성하는 방법

질문 : C와 C ++ 모두에서 유효한 코드가 각 언어로 컴파일 될 때 다른 동작을 생성 할 수 있습니까? C와 C ++에는 많은 차이가 있으며 모든 유효한 C 코드가 유효한 C ++ 코드는 아닙니다. ( "유효"란 정의 된 동작이있는 표준 코드를 의미합니다. 즉, 구현 특정 / 정의되지 않은 등이 아닙니다.) C와 C ++ 모두에서 유효한 코드 조각이 각 언어의 표준 컴파일러로 컴파일 될 때 다른 동작을 생성하는 시나리오가 있습니까? 합리적이고 유용한 비교를하기 위해 (질문에서 명백한 허점을 찾으려하지 않고 실질적으로 유용한 것을 배우려고합니다) 다음과 같이 가정 해 보겠습니다. 전처리 기와 관련된 것은 없습니다 (즉 #ifdef __cplusplus , pragma 등의 해킹이 없음을 의미합니다.) ..

C ++에서 인터페이스를 선언하는 방법

질문 : C ++에서 인터페이스를 어떻게 선언합니까? 인터페이스를 나타내는 클래스를 어떻게 설정합니까? 이것은 추상 기본 클래스입니까? 답변 bradtgmurray 의 답변을 확장하려면 가상 소멸자를 추가하여 인터페이스의 순수 가상 메서드 목록에 한 가지 예외를 만들 수 있습니다. 이를 통해 구체적인 파생 클래스를 노출하지 않고도 포인터 소유권을 다른 당사자에게 전달할 수 있습니다. 인터페이스에는 구체적인 멤버가 없기 때문에 소멸자는 아무것도 할 필요가 없습니다. 함수를 가상과 인라인으로 정의하는 것은 모순되는 것처럼 보일 수 있지만 저를 믿으십시오. 그렇지 않습니다. class IDemo { public: virtual ~IDemo() {} virtual void OverrideMe() = 0; }; ..

728x90
반응형