«language-lawyer» 태그된 질문

프로그래밍 언어 및 환경의 공식 또는 권위있는 사양의 복잡성에 대한 질문

2
화살표 (->) 연산자 우선 순위 / 우선 순위가 가장 낮거나 지정 / 결합 된 우선 순위가 가장 낮습니까?
JLS : - (>)는 낮은 우선 운영자는 람다 식의 화살표이고 , 다음 할당 사업자. 어느 방향 (우선 순위 증가, 우선 순위 감소)을 따랐습니까? - "팔로우"는 할당이 우선 순위가 높거나 우선 순위가 낮다는 것을 의미합니다 (화살표 연산자와 관련하여)? "가장 낮은"(화살표의 경우)은 절대적으로 가장 낮기 때문에 증가하고 있다고 생각합니다. 내가 이해하는 것처럼 …

2
변수 초기화를 잘못 건너 뛰거나 정의되지 않은 동작을 유발합니까?
이 코드를 고려하십시오. void foo() { goto bar; int x = 0; bar: ; } GCC와 Clang 은 변수 초기화 를 건너 뛰기 때문에 이를 거부합니다bar: . MSVC는 (사용 제외하고는 전혀 불평하지 않습니다 x후 bar:원인 경고). 우리는 비슷한 일을 할 수 있습니다 switch: void foo() { switch (0) { int …

1
C ++ 표준이 파일을 처리하는 방식을 찾는 이유는 무엇입니까?
C ++는 streamoff형식을 사용하여 (파일) 스트림 내의 오프셋을 나타내며 [stream.types]에 다음과 같이 정의됩니다. using streamoff = implementation-defined ; type streamoff는 운영 체제에 가능한 최대 파일 크기를 나타내기에 충분한 크기의 서명 된 기본 정수 유형 중 하나와 동의어입니다. 287) 287) 일반적으로 길다. 이것은 long32 비트 너비 의을 사용하는 것과는 반대로 큰 …

1
클래스 템플릿의 중첩 클래스가 특수화를 통해서만 정의 된 코드를 거부하기 위해 Clang이 올바른가요?
다음과 같은 클래스 템플릿이 제공됩니다. template<typename T> struct Outer { struct Inner; auto f(Inner) -> void; }; 우리는 정의 Inner 각 전문 분야에 대해 별도로 합니다 Outer. template<> struct Outer<int>::Inner {}; template<> struct Outer<double>::Inner {}; 그런 다음 멤버 함수를 정의하십시오. f 모든 전문화에 대해 한 번Outer . auto Outer<T>::f(Inner) -> …

1
sizeof (enum)이 sizeof (std :: underlying_type <Enum> :: type)과 다를 수 있습니까?
최근에 다음 예제에서 코드 검토를 수행했습니다. enum class A : uint8_t { VAL1, VAL2 }; ... std::vector&lt;A&gt; vOfA; // Assume this is sized and full of some stuff. std::memcpy(wire_buffer, vOfA.data(), vOfA.size() * sizeof(A)); sizeof(std::underlying_type&lt;A&gt;::type)대신에 사용해야합니다 sizeof(A). 이것들이 다를 수 있습니까? 누군가 이것을 보장하는 표준 견적이 있습니까?


1
C ++ 컴파일러는 extern 변수를 어떻게 찾습니까?
이 프로그램을 g ++ 및 clang ++로 컴파일합니다. 차이점은 다음과 같습니다. g ++는 1을 인쇄하지만 clang ++는 2를 인쇄합니다. g ++ : extern varible은 가장 짧은 범위에서 정의 된 것 같습니다 . clang ++ : extern varible은 가장 짧은 전역 범위에서 정의됩니다. C ++ 사양에 대한 사양이 있습니까? main.cpp #include …

2
왜 std :: basic_ios에 public 생성자가 있습니까?
std::basic_ios공개 생성자가 있습니다 : explicit basic_ios (std::basic_streambuf&lt;CharT,Traits&gt;* sb); 클래스가 공용 생성자를 갖는 유일한 이유는 프로그램에서 해당 클래스의 독립형 인스턴스를 사용하는 것입니다. 클래스가 다른 클래스의 클래스에서만 존재하는 경우 (있는 경우 basic_ios) 클래스의 모든 생성자는이어야합니다 protected. 의 생성자 std::ios_base는 모두 보호됩니다. 그러나 어떤 이유로 표준 설계자들은 이것을 하나의 basic_ios공개 생성자로 만들었습니다 . …

2
유효한 C ++ 프로그램을 종료하지 않는 프로그램입니까?
프로그램을 종료해야합니까? 다시 말해서 기술적으로 정의되지 않은 동작을 영원히 실행하는 프로그램입니까? 이것은 빈 루프에 관한 것이 아닙니다. 영원히 "물건"(즉, 관찰 가능한 행동)을하는 프로그램에 대해 이야기합니다. 예를 들면 다음과 같습니다. int main() { while (true) { try { get_input(); // calls IO process(); put_output(); // calls IO, has observable behavior // …

1
빈 기본 클래스가 멤버 변수 인 경우 빈 기본 최적화가 금지 된 이유는 무엇입니까?
빈 기본 최적화 가 훌륭합니다. 그러나 다음과 같은 제한 사항이 있습니다. 비어있는 기본 클래스 중 하나가 첫 번째 비 정적 데이터 멤버의 유형이거나 해당 유형 인 경우 비어있는 기본 최적화는 금지됩니다. 동일한 유형의 두 기본 서브 오브젝트는 오브젝트 표현 내에서 다른 주소를 가져야하기 때문입니다. 가장 많이 파생 된 유형의 이 …

1
__func__ 포인터의 두 constexpr 인스턴스의 차이점이 여전히 constexpr입니까?
이것이 유효한 C ++입니까? int main() { constexpr auto sz = __func__ - __func__; return sz; } GCC와 MSVC는 괜찮다고 생각하지만 Clang은 그렇지 않다고 생각합니다. 컴파일러 탐색기 . 모든 컴파일러는 이것이 컴파일러 탐색기 라는 것에 동의합니다 . int main() { constexpr auto p = __func__; constexpr auto p2 = p; …

1
std :: gcd의 버그입니까?
나는 std::gcd예기치 않은 것을 발견 한이 행동을 보았습니다 . #include &lt;iostream&gt; #include &lt;numeric&gt; int main() { int a = -120; unsigned b = 10; //both a and b are representable in type C using C = std::common_type&lt;decltype(a), decltype(b)&gt;::type; C ca = std::abs(a); C cb = b; std::cout &lt;&lt; a &lt;&lt; …

2
사소한 기본 생성자가 동작을 수행하지 않으면 malloc을 사용하여 사소한 구성 가능한 오브젝트를 작성할 수없는 이유는 무엇입니까?
사소한 기본 생성자에 대한 cppreference 에서 인용 한 다음 단락을 이해하는 데 어려움이 있습니다. 나는 stackoverflow를 검색했지만 여전히 명확한 대답을 얻지 못했습니다. 도와주세요. 간단한 기본 생성자는 동작을 수행하지 않는 생성자입니다. C 언어 (POD 유형)와 호환되는 모든 데이터 유형은 기본적으로 구성 가능합니다. 그러나 C와 달리 간단한 기본 생성자를 가진 객체는 std …

4
C ++ 11에서 StoreLoad 장벽을 달성하는 방법?
고전적인 문제의 변형을 해결하는 휴대용 코드 (Intel, ARM, PowerPC ...)를 작성하고 싶습니다. Initially: X=Y=0 Thread A: X=1 if(!Y){ do something } Thread B: Y=1 if(!X){ do something } 하는 목표는 모두 스레드가 수행되는 상황을 방지하는 것입니다something . (아무것도 실행되지 않으면 괜찮습니다. 이것은 한 번만 실행되는 메커니즘이 아닙니다.) 아래의 내 추론에 …

4
cppreference에서 완화 된 순서에 대한 설명이 잘못 되었습니까?
cppreference.com 의 설명서std::memory_order 에는 완화 된 주문의 예가 ​​있습니다. 편안한 주문 태그 memory_order_relaxed가 지정된 원자 작업 은 동기화 작업이 아닙니다. 동시 메모리 액세스간에 순서를 부과하지 않습니다. 원 자성 및 수정 순서 일관성 만 보장합니다. 예를 들어 x와 y가 처음에 0 인 경우 // Thread 1: r1 = y.load(std::memory_order_relaxed); // A …

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