«c++» 태그된 질문

C ++는 범용 프로그래밍 언어입니다. 원래 C에 대한 확장으로 설계되었으며 유사한 구문을 갖지만 이제는 완전히 다른 언어입니다. C ++ 컴파일러로 컴파일 된 코드에 대한 질문에이 태그를 사용하십시오. 특정 표준 개정 [C ++ 11], [C ++ 14], [C ++ 17] 또는 [C ++ 20] 등과 관련된 질문에 버전 별 태그를 사용하십시오.

3
명시 적 (bool)의 유스 케이스는 무엇입니까
C ++ 20은 생성시 명시 적 으로 여부를 컴파일 타임에 조건부로 선택하는 명시 적 (bool) 을 도입했습니다 . 아래는 내가 발견 한 예입니다 여기가 . struct foo { // Specify non-integral types (strings, floats, etc.) require explicit construction. template <typename T> explicit(!std::is_integral_v<T>) foo(T) {} }; foo a = 123; // …
24 c++  c++20  explicit 

2
모듈 인터페이스에서 인라인 의미
헤더 파일을 고려하십시오. class T { private: int const ID; public: explicit T(int const ID_) noexcept : ID(ID_) {} int GetID() const noexcept { return ID; } }; 또는 대안 적으로 : class T { private: int const ID; public: explicit T(int const ID_) noexcept; int GetID() const noexcept; }; …

1
`decltype (static_cast <T> (…))`이 항상`T`가 아닌 이유는 무엇입니까?
다음 코드의 경우 마지막 어설 션을 제외한 모든 어설 션이 전달됩니다. template&lt;typename T&gt; constexpr void assert_static_cast_identity() { using T_cast = decltype(static_cast&lt;T&gt;(std::declval&lt;T&gt;())); static_assert(std::is_same_v&lt;T_cast, T&gt;); } int main() { assert_static_cast_identity&lt;int&gt;(); assert_static_cast_identity&lt;int&amp;&gt;(); assert_static_cast_identity&lt;int&amp;&amp;&gt;(); // assert_static_cast_identity&lt;int(int)&gt;(); // illegal cast assert_static_cast_identity&lt;int (&amp;)(int)&gt;(); assert_static_cast_identity&lt;int (&amp;&amp;)(int)&gt;(); // static assert fails } 왜이 마지막 주장은 실패하고, static_cast&lt;T&gt;항상을 반환하지 …
24 c++  static-cast 

3
C ++ 20 개념 : 템플릿 인수가 여러 개념에 적합한 경우 어떤 템플릿 전문화가 선택됩니까?
주어진 : #include &lt;concepts&gt; #include &lt;iostream&gt; template&lt;class T&gt; struct wrapper; template&lt;std::signed_integral T&gt; struct wrapper&lt;T&gt; { wrapper() = default; void print() { std::cout &lt;&lt; "signed_integral" &lt;&lt; std::endl; } }; template&lt;std::integral T&gt; struct wrapper&lt;T&gt; { wrapper() = default; void print() { std::cout &lt;&lt; "integral" &lt;&lt; std::endl; } }; int main() { wrapper&lt;int&gt; …

2
이 템플릿 기능이 예상대로 작동하지 않는 이유는 무엇입니까?
템플릿 기능에 대해 읽고 있었고이 문제로 혼란스러워했습니다. #include &lt;iostream&gt; void f(int) { std::cout &lt;&lt; "f(int)\n"; } template&lt;typename T&gt; void g(T val) { std::cout &lt;&lt; typeid(val).name() &lt;&lt; " "; f(val); } void f(double) { std::cout &lt;&lt; "f(double)\n"; } template void g&lt;double&gt;(double); int main() { f(1.0); // f(double) f(1); // f(int) g(1.0); …

1
왜 C ++에서 클래스의 크기가 데이터 멤버의 공개 / 개인 상태에 의존합니까?
내가 아는 것에서 C ++의 클래스 크기는 아래 요인에 따라 다릅니다. 모든 비 정적 데이터 멤버의 크기 데이터 멤버의 순서. 바이트 패딩이 사용 가능한지 여부 바로 기본 클래스의 크기입니다. 가상 기능의 존재. 상속 모드 (가상 상속). 이제 아래와 같이 2 개의 클래스를 만들었습니다. class A{ int a; short s; int …

3
전역 변수에 대한 참조에서 람다 함수 변경 가능 캡처의 동작 차이
람다를 사용하여 가변 키워드로 전역 변수에 대한 참조를 캡처 한 다음 람다 함수의 값을 수정하면 컴파일러마다 결과가 다릅니다. #include &lt;stdio.h&gt; #include &lt;functional&gt; int n = 100; std::function&lt;int()&gt; f() { int &amp;m = n; return [m] () mutable -&gt; int { m += 123; return m; }; } int main() { …

1
함수 매개 변수의 템플리트 인수 자리 표시자인 'auto'
C ++ 20에서는 auto함수 매개 변수 유형을 사용할 수 있습니다 . 또한 사용 수 있습니까 auto템플릿 인수 자리 표시 자 (유사하지 만의 정신에서 C ++ 17 템플릿 &lt;자동&gt; 방식) 함수의 매개 변수 유형을 검색 하시나요? 따라서 C ++ 20 이전 코드는 다음과 같습니다. template&lt;typename First, typename Second&gt; void printPair(const std::pair&lt;First, …
22 c++  templates  auto  c++20 

1
자체 이니셜 라이저에서 변수 사용
C ++ 20 표준 초안의 [basic.scope.pdecl] / 1 은 다음과 같은 (비 규범 적) 예제를 주 ( 풀 요청 3580 의 병합 이전의 부분 인용 ,이 질문에 대한 답변 참조)에 있습니다. unsigned char x = x; [...] x는 자체 (결정되지 않은) 값으로 초기화됩니다. 이것이 실제로 C ++ 20에서 잘 정의 …

6
C ++에서 오버로드 된 생성자를 통해 알 수없는 유형의 변수 초기화
주로 파이썬 배경에서 나오기 때문에 C ++에서 유형 작업에 다소 어려움을 겪었습니다. 다른 유형을 매개 변수로 사용하는 여러 오버로드 된 생성자 중 하나를 통해 클래스 변수를 초기화하려고합니다. auto키워드 를 사용하여 변수의 자동 선언에 사용할 수 있지만 내 경우에는 생성자를 선택할 때까지 초기화되지 않습니다. 그러나 컴파일러는 초기화하지 않는 것에 만족하지 않습니다 …

3
shared_ptr의 삭제 기는 커스텀 할당자가 할당 한 메모리에 저장되어 있습니까?
shared_ptr사용자 지정 할당 자 와 사용자 지정 삭제 기가 있다고 가정 해보십시오. 표준에서 삭제 프로그램을 저장할 위치에 대한 내용을 찾을 수 없습니다. 사용자 지정 할당자가 삭제 프로그램의 메모리에 사용될 것이라고 말하지 않으며 그렇지 않을 것이라고 말하지 않습니다 . 이것이 지정되지 않았습니까? 아니면 뭔가 빠졌습니까?

2
POD 유형이 사소한 표준 레이아웃 유형과 정확히 동일합니까?
C ++ 20에서는 POD의 개념이 더 이상 사용되지 않습니다. 사소하고 표준적인 레이아웃이라는 의미없는 복합적인 특성이기 때문입니다. 그러나 C ++ 20 드래프트에서 POD의 정의는 정확히 "사소하고 표준적인 레이아웃"이 아닙니다. 실제로는 다음과 같습니다. POD 클래스는 사소한 클래스 및 표준 레이아웃 클래스이며 비 -POD 클래스 (또는 그 배열) 유형의 비 정적 데이터 멤버가 …

2
실제로 어떤 <random>의 난수 엔진을 사용해야합니까? std :: mt19937?
&lt;random&gt;실제 프로그램에서 C ++ 기능 을 사용하려고한다고 가정합니다 ( "실제"에 대한 정의 – 여기서 제약은이 질문의 일부 임). 대략 다음과 같은 코드가 있습니다. int main(int argc, char **argv) { int seed = get_user_provided_seed_value(argc, argv); if (seed == 0) seed = std::random_device()(); ENGINE g(seed); // TODO: proper seeding? go_on_and_use(g); } 내 …
21 c++  c++11  random 

4
반환시 암시 적 변환은 허용되지 않습니다.
#include &lt;optional&gt; bool f() { std::optional&lt;int&gt; opt; return opt; } 컴파일하지 않습니다 : 'return': cannot convert from 'std::optional&lt;int&gt;' to 'bool' 컨설팅 참조 설명을 찾아야한다고 생각했지만 괜찮 았으므로 읽었습니다. 일부 유형 T1의 표현식이 해당 유형을 허용하지 않지만 다른 유형 T2를 허용하는 컨텍스트에서 사용될 때마다 내재적 변환이 수행됩니다. 특히: T2를 매개 변수로 …


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.