«c++» 태그된 질문

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

3
0 크기의 동적 배열에 대한 포인터를 증가시키는 것이 정의되어 있지 않습니까?
AFAIK는 0 크기의 정적 메모리 배열을 만들 수는 없지만 동적 배열로 만들 수는 있습니다. int a[0]{}; // Compile-time error int* p = new int[0]; // Is well-defined 내가 읽은 p것처럼 과거의 한 요소처럼 작동합니다. p가리키는 주소를 인쇄 할 수 있습니다 . if(p) cout << p << endl; 반복기 (과거의 마지막 …

2
함수에 대한 포인터를 새로 할당하는 것이 합법적입니까?
함수에 대한 포인터는 void * 포인터에 저장할 수 없으므로 일반 데이터 포인터가 아닙니다. 그럼에도 불구하고 아래 코드와 같이 함수 포인터의 사본을 동적 메모리 (gcc 및 clang)에 저장할 수있는 것 같습니다. 이러한 코드는 C ++ 표준에 따라 합법적입니까, 아니면 일종의 컴파일러 확장입니까? 또한 함수 포인터에 대한 결과 포인터는 일반 데이터 포인터처럼 …
33 c++ 


3
C ++ 선언과 괄호-왜?
주제는 이전 에 논의 되었지만 중복 된 것은 아닙니다. 누군가 decltype(a)와와 의 차이점에 대해 물을 때 decltype((a))일반적인 대답은 a변수 (a)입니다. 이 답변이 만족스럽지 않습니다. 먼저 a표현도 있습니다. 기본 표현식 의 옵션 에는 다음이 포함됩니다. ( 표현 ) 아이디 표현 더 중요한 것은 decltype에 대한 문구는 괄호를 매우 명확하게 고려한다는 것입니다 …

4
왜 gcc에서 두 개의 using 절이 동일한 유형으로 해석되어 모호한 것으로 보입니다.
using 절을 사용하는 두 가지 기본 클래스가 있습니다. class MultiCmdQueueCallback { using NetworkPacket = Networking::NetworkPacket; .... } class PlcMsgFactoryImplCallback { using NetworkPacket = Networking::NetworkPacket; .... } 그런 다음 수업을 선언합니다 class PlcNetwork : public RouterCallback, public PlcMsgFactoryImplCallback, public MultiCmdQueueCallback { private: void sendNetworkPacket(const NetworkPacket &pdu); } 그런 다음 컴파일러는 'NetworkPacket'에 …

2
std :: vector에 추가 할 때 클래스 필드의 이상한 동작
다음 상황에서 매우 이상한 동작 (clang 및 GCC에서)이 발견되었습니다. nodes하나의 요소가있는 class의 인스턴스 가있는 벡터가 있습니다 Node. 그런 다음 벡터에 nodes[0]새로운 것을 추가 하는 함수를 호출합니다 Node. 새 노드가 추가되면 호출 객체의 필드가 재설정됩니다! 그러나 일단 기능이 완료되면 다시 정상으로 돌아 오는 것 같습니다. 나는 이것이 최소한의 재현 가능한 예라고 …


4
C와 C ++에서 (…)는 무엇입니까?
의 사용 중 하나는 C 및 C ++에서 가변 요소 ...를 나타내는 것 입니다. 그건 뭐예요? 그런 식으로 사용될 때 연산자 또는 다른 것으로 분류됩니까? 다른 자세한 내용은 ...? 편집 : 의 목적을 알고 ...있습니다. 이름과 분류에 대해 묻고 싶습니다 .C와 C ++ 모두 비슷합니다.

6
std :: vector :: swap 메소드를 사용하여 C ++에서 두 개의 다른 벡터를 바꾸는 것이 안전합니까?
다음 코드가 있다고 가정하십시오. #include <iostream> #include <string> #include <vector> int main() { std::vector<std::string> First{"example", "second" , "C++" , "Hello world" }; std::vector<std::string> Second{"Hello"}; First.swap(Second); for(auto a : Second) std::cout << a << "\n"; return 0; } 벡터가 std::string아직 클래스 가 아니라고 상상해보십시오 . std::vector<Widget> WidgetVector; std::vector<Widget2> Widget2Vector; 이 std::vector::swap방법으로 …
30 c++  c++11  vector  stdvector  swap 

4
초기화되지 않은 멤버로 구조체 복사
멤버가 초기화되지 않은 일부 구조체를 복사하는 것이 유효합니까? 나는 그것이 정의되지 않은 행동이라고 생각하지만, 그렇다면 초기화되지 않은 멤버를 구조체에 남겨 두는 것은 매우 위험합니다. 그래서 표준에 허용되는 것이 있는지 궁금합니다. 예를 들어, 이것이 유효합니까? struct Data { int a, b; }; int main() { Data data; data.a = 5; Data …

2
왜 std :: string :: find ()가 실패했을 때 end iterator를 반환하지 않습니까?
std::string::find표준 C ++ 컨테이너와 동작 이 일치하지 않습니다. 예 : std::map<int, int> myMap = {{1, 2}}; auto it = myMap.find(10); // it == myMap.end() 그러나 문자열의 경우 std::string myStr = "hello"; auto it = myStr.find('!'); // it == std::string::npos 왜 실패한 myStr.find('!')반품 myStr.end()이 std::string::npos아닌가? std::string다른 컨테이너와 비교할 때 다소 특별 …

2
std :: hash가 결정적이라고 보장되지 않는 이유는 무엇입니까?
이하에서는 N4140 (C ++ 14 표준)을 사용합니다. 에 따르면 17.6.3.4 해시 요구 사항을 § , 반환 된 값 k 은 프로그램 기간 동안의 인수에만 의존해야 합니다 . [참고 : 따라서 h(k)동일한 값을 가진 표현식의 모든 평가 는 주어진 프로그램 실행에 대해k 동일한 결과 를 산출합니다 . — 끝 참고] 및 …

1
다시 방문한 C ++ 컴파일 타임 카운터
TL; DR 이 전체 게시물을 읽으려고 시도하기 전에 다음 사항을 숙지하십시오. 제시된 문제에 대한 해결책 은 나 자신 에 의해 발견 되었지만 여전히 분석이 올바른지 알고 싶어합니다. fameta::counter나머지 몇 가지 단점을 해결하는 클래스 로 솔루션을 패키지했습니다 . github에서 찾을 수 있습니다 . 당신은 godbolt 에 대한 직장에서 그것을 볼 수 …

1
클래스가 자체 정적 정적 constexpr 메소드에 액세스 할 수 없습니다-Clang bug?
이 코드는 Clang (6,7,8,9, 트렁크)에서 컴파일되지 않지만 GCC (7.1, 8.1, 9.1)에서는 잘 컴파일됩니다. template<class T> struct TypeHolder { using type = T; }; template<int i> class Outer { private: template<class T> static constexpr auto compute_type() { if constexpr (i == 42) { return TypeHolder<bool>{}; } else { return TypeHolder<T>{}; } …

2
수업이 기본 구성이 아닌 이유는 무엇입니까?
나는 그 수업을 가지고 있습니다 : #include <type_traits> template <typename T> class A { public: static_assert(std::is_default_constructible_v<T>); }; struct B { struct C { int i = 0; }; A<C> a_m; }; int main() { A<B::C> a; } 컴파일 할 때 a_m기본 구성 가능하지 않지만 a입니다. 로 변경할 때 C: struct …
28 c++ 

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