«language-lawyer» 태그된 질문

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

7
C에서 배열 초기화에 대한 혼란
C 언어에서 다음과 같이 배열을 초기화하면 : int a[5] = {1,2}; 그러면 명시 적으로 초기화되지 않은 배열의 모든 요소는 암시 적으로 0으로 초기화됩니다. 그러나 다음과 같이 배열을 초기화하면 : int a[5]={a[2]=1}; printf("%d %d %d %d %d\n", a[0], a[1],a[2], a[3], a[4]); 산출: 1 0 1 0 0 이해가 안되는데 왜 대신 …

4
null 참조가 가능합니까?
이 코드 조각이 유효합니까 (그리고 정의 된 동작)? int &nullReference = *(int*)0; 둘 다 g ++ 및 그 소리 ++ 컴파일을 경고없이 사용하는 경우에도 -Wall, -Wextra, -std=c++98, -pedantic, -Weffc++... 물론 참조는 액세스 할 수 없기 때문에 실제로는 null이 아니지만 (null 포인터를 역 참조하는 것을 의미합니다) 주소를 확인하여 null인지 여부를 확인할 …

8
"else if"는 단일 키워드입니까?
저는 C ++를 처음 사용합니다. 나는 종종 아래와 같은 조건문을 본다. if statement_0; else if statement_1; 질문: 구문 적else if 으로는 단일 키워드로 취급해야 합니까? 아니면 실제로 if외부else 아래와 같이 입니까? if statement_0; else if statement_1;

7
주 함수 대신 main이라는 전역 변수가있는 프로그램이 어떻게 작동 할 수 있습니까?
다음 프로그램을 고려하십시오. #include <iostream> int main = ( std::cout << "C++ is excellent!\n", 195 ); Windows 7 OS에서 g ++ 4.8.1 (mingw64)을 사용하면 프로그램이 제대로 컴파일되고 실행되며 다음과 같이 인쇄됩니다. C ++는 훌륭합니다! 콘솔에. main함수가 아닌 전역 변수로 보입니다. 이 프로그램이 기능없이 어떻게 실행될 수 main()있습니까? 이 코드는 C …

2
“The C ++ Programming Language”제 4 판 섹션 36.3.6의이 코드가 잘 정의 된 동작을 가지고 있습니까?
Bjarne Stroustrup의 The C ++ Programming Language 4 판 섹션 36.3.6 STL-like Operations 에서 다음 코드는 연결 의 예로 사용됩니다 . void f2() { std::string s = "but I have heard it works even if you don't believe in it" ; s.replace(0, 4, "" ).replace( s.find( "even" ), 4, "only" …

8
구현 정의 동작을 피하는 효율적인 unsigned-to-signed 캐스트
나는 그것을 취하는 함수를 정의하고 싶다. unsigned int인수로 인수에 int합동 모듈로 UINT_MAX + 1을 반환하는 . 첫 번째 시도는 다음과 같습니다. int unsigned_to_signed(unsigned n) { return static_cast<int>(n); } 그러나 모든 언어 변호사가 알고 있듯이 INT_MAX보다 큰 값에 대해 unsigned에서 signed로 캐스팅하는 것은 구현에 따라 정의됩니다. 나는 이것을 구현하여 (a) 사양에서 …


3
C ++에서 형식 정보는 언제 역방향으로 흐르나요?
방금 Stephan T. Lavavej CppCon 2018가 "Class Template Argument Deduction (클래스 템플릿 인수 추론)"에 대해 이야기하는 것을 보았습니다. 어느 시점에서 그는 우연히 다음과 같이 말합니다. C ++에서 유형 정보는 거의 역방향으로 흐르지 않습니다. 한두 가지 경우가 있기 때문에 "거의"라고 말해야했습니다 . 그가 어떤 사건을 언급하고 있는지 알아 내려고했지만 나는 아무것도 …

4
일부 컴파일러가 동일한 문자열 리터럴에 동일한 주소를 사용하는 이유는 무엇입니까?
https://godbolt.org/z/cyBiWY 'some'MSVC에서 생성 한 어셈블러 코드에서 두 개의 리터럴을 볼 수 있지만 clang과 gcc가있는 것은 하나뿐입니다. 이로 인해 코드 실행 결과가 완전히 다릅니다. static const char *A = "some"; static const char *B = "some"; void f() { if (A == B) { throw "Hello, string merging!"; } } 누구든지 …


2
연산자 우선 순위 외에 추가 괄호는 언제 영향을 미칩니 까?
C ++의 괄호는 여러 위치에서 사용됩니다. 예를 들어 연산자 우선 순위를 재정의하는 함수 호출 및 그룹화 표현식에서. 그렇다 불법 여분의 괄호에서 (예 : 주변에 함수 호출 인수 목록과 같은), C의 일반적인 - 그러나 absolute-하지 규칙 ++ 것입니다 추가 괄호 해치지 않을 : 5.1 기본 표현식 [expr.prim] 5.1.1 일반 [expr.prim.general] 6 …




8
정의되지 않은 동작이있는 분기를 도달 할 수 없다고 가정하고 데드 코드로 최적화 할 수 있습니까?
다음 진술을 고려하십시오. *((char*)NULL) = 0; //undefined behavior 정의되지 않은 동작을 명확하게 호출합니다. 주어진 프로그램에 그러한 명령문이 존재한다는 것은 전체 프로그램이 정의되지 않았거나 제어 흐름이이 명령문에 도달하면 동작이 정의되지 않음을 의미합니까? 사용자가 번호를 입력하지 않는 경우 다음 프로그램이 잘 정의되어 3있습니까? while (true) { int num = ReadNumberFromConsole(); if (num …

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