전통적으로 C ++에 여러 헤더가 포함되는 것을 피하는 표준 및 이식 가능한 방법은 매크로 가드 체계#ifndef - #define - #endif 라고도 하는 프리 컴파일러 지시문 체계 를 사용하는 것입니다 (아래 코드 조각 참조). #ifndef MY_HEADER_HPP #define MY_HEADER_HPP ... #endif 그러나 대부분의 구현 / 컴파일러 (아래 그림 참조)에는라는 매크로 보호 체계와 …
때로는 std::thread응용 프로그램 속도를 높이기 위해 사용해야 합니다. 또한 join()스레드가 완료 될 때까지 기다립니다. 이것은 이해하기 쉽지만 호출 detach()과 호출하지 않는 것의 차이점은 무엇 입니까? 이 없으면 detach()스레드의 메소드는 스레드를 독립적으로 사용할 수 있다고 생각했습니다 . 분리하지 않음 : void Someclass::Somefunction() { //... std::thread t([ ] { printf("thread called without …
C ++ 11 개 를 소개 사용자 정의 리터럴 기존 리터럴을 기반으로 새로운 리터럴 구문의 도입을 허용 할 것이다 ( int, hex, string, float) 그래서 어떤 종류의 문자 그대로의 프리젠 테이션을 할 수있을 것입니다. 예 : // imaginary numbers std::complex<long double> operator "" _i(long double d) // cooked form { …
다음 코드가 컴파일되어 실행된다는 것에 어떻게 든 놀랐습니다 (vc2012 & gcc4.7.2) class Foo { struct Bar { int i; }; public: Bar Baz() { return Bar(); } }; int main() { Foo f; // Foo::Bar b = f.Baz(); // error auto b = f.Baz(); // ok std::cout << b.i; } …
이 포스트 에서 본 것부터 Effective C ++ 라는 책을 읽기 시작했습니다 . 그러나 이제 C ++ 11로 인해 많은 새로운 기능이 있으며 몇 가지 모범 사례가 변경되었으므로 실제로 좋은 아이디어인지 확실하지 않습니다. C ++ 11의 출현으로 Effective C ++에 포함 된 조언이 더 이상 사용되지 않습니까? 그렇다면 어떤 주제를 …
표준은 객체가 이동 한 후에 할 수있는 것을 정확하게 정의합니까? 이동 된 객체로 할 수있는 모든 것은 그것을 파괴하는 것이라고 생각했지만 충분하지는 않습니다. 예를 들어 swap표준 라이브러리에 정의 된 함수 템플릿 을 사용하십시오. template <typename T> void swap(T& a, T& b) { T c = std::move(a); // line 1 a …
짧은 단락의 운영자의 행동 &&과는 ||프로그래머를위한 놀라운 도구입니다. 그러나 오버로드 될 때 왜이 동작이 손실됩니까? 연산자는 함수의 구문 설탕 일 뿐이지 만 연산자 bool는이 동작 을 가지고 있습니다. 왜이 단일 유형으로 제한되어야합니까? 이것 뒤에 기술적 이유가 있습니까?
(참고 :이 질문은 요소 수를 지정하지 않아도 중첩 된 유형을 직접 초기화 할 수 있습니다.) 이 질문 은 C 배열의 왼쪽 사용법을 설명합니다 int arr[20];. 에 그의 대답 , C 배열의 마지막 거점의 @ 제임스 칸 세이 쇼 하나, 그것은 독특한 초기화 특성이있다 : int arr[] = { 1, 3, …
C ++에서 컴파일 타임에 문자열을 생성하고 조작 할 수 있다는 것은 몇 가지 유용한 응용 프로그램이 있습니다. C ++에서 컴파일 타임 문자열을 생성 할 수 있지만 문자열이 가변적 인 일련의 문자로 선언되어야하므로 프로세스가 매우 번거 롭습니다. using str = sequence<'H', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', …
나는 왜 내가 이것을 할 것인지 이해하지 못한다. struct S { int a; S(int aa) : a(aa) {} S() = default; }; 왜 그렇게 말하지 않습니까? S() {} // instead of S() = default; 왜 새로운 구문을 가져 오나요?
가변 템플릿 인수가있는 템플릿 함수의 경우를 고려하십시오. template<typename Tret, typename... T> Tret func(const T&... t); 이제 튜플 t값이 있습니다. func()튜플 값을 인수로 사용하여 어떻게 호출 합니까? bind()함수와 call()함수 및 apply()현재 사용되지 않는 다른 문서 의 함수에 대해 읽었습니다 . GNU GCC 4.4 구현은 클래스에 call()기능 이있는 것으로 보이지만 bind()주제에 대한 …
제목에서 알 수 있듯이 새로운 C ++ 11 <random>라이브러리를 사용하여 난수를 생성하는 방법을 찾으려고합니다 . 이 코드로 시도했습니다. std::default_random_engine generator; std::uniform_real_distribution<double> uniform_distance(1, 10.001); 내가 가진 코드의 문제점은 컴파일하고 실행할 때마다 항상 같은 숫자를 생성한다는 것입니다. 그래서 내 질문은 무작위 라이브러리의 다른 함수가 진정으로 무작위 인 동안 이것을 달성 할 수있는 …
람다가 주어지면 매개 변수 유형과 반환 유형을 알아낼 수 있습니까? 그렇다면 어떻게? 기본적으로 lambda_traits다음과 같은 방식으로 사용할 수 있습니다. auto lambda = [](int i) { return long(i*10); }; lambda_traits<decltype(lambda)>::param_type i; //i should be int lambda_traits<decltype(lambda)>::return_type l; //l should be long 뒤에 동기 lambda_traits는 람다를 인수로 받아들이는 함수 템플릿에서 사용하고 싶습니다 …