«language-lawyer» 태그된 질문

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

3
이 전환 연산자의 과부하가 선택된 이유는 무엇입니까?
다음 코드를 고려하십시오 . struct any { template <typename T> operator T &&() const; template <typename T> operator T &() const; }; int main() { int a = any{}; } 여기서 두 번째 변환 연산자는 과부하 해상도에 의해 선택됩니다. 왜? 지금까지 내가 그것을 이해, 두 사업자에 추론된다 operator int &&() …

3
const 참조로 기본 인수 값을 반환해도됩니까?
아래 예제와 같이 const 참조로 기본 인수 값을 반환해도됩니까? https://coliru.stacked-crooked.com/a/ff76e060a007723b #include <string> const std::string& foo(const std::string& s = std::string("")) { return s; } int main() { const std::string& s1 = foo(); std::string s2 = foo(); const std::string& s3 = foo("s"); std::string s4 = foo("s"); }

1
C에서 겹치는 객체의 의미는 무엇입니까?
다음 구조를 고려하십시오. struct s { int a, b; }; 일반적으로 1 이면이 구조체의 크기는 8이고 정렬은 4입니다. 두 개의 struct s객체를 생성하고 (보다 정확하게는 두 개의 객체를 할당 된 저장소에 쓰면) 두 번째 객체가 첫 번째 객체와 겹치는 경우 어떻게해야합니까? char *storage = malloc(3 * sizeof(struct s)); struct s …

3
컴파일러가 로컬 휘발성을 일정하게 접을 수 있습니까?
이 간단한 코드를 고려하십시오. void g(); void foo() { volatile bool x = false; if (x) g(); } https://godbolt.org/z/I2kBY7 에 대한 잠재적 호출을 최적화 gcc하거나 clang최적화 하지는 않습니다 g. 이것은 내 이해에 맞습니다 : 추상 기계는 volatile변수가 언제든지 (하드웨어 매핑 등으로 인해) 변경 될 수 있다고 가정해야 하므로 false초기화에 if검사 …

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; }; …

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

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

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

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

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

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


1
함수 인수로서 {}가 왜 모호성을 유발하지 않습니까?
이 코드를 고려하십시오. #include <vector> #include <iostream> enum class A { X, Y }; struct Test { Test(const std::vector<double>&, const std::vector<int>& = {}, A = A::X) { std::cout << "vector overload" << std::endl; } Test(const std::vector<double>&, int, A = A::X) { std::cout << "int overload" << std::endl; } }; int …

4
std :: back_inserter와 함께 std :: transform을 사용하는 것이 유효합니까?
Cppreference에는 다음에 대한 예제 코드가 있습니다 std::transform. std::vector<std::size_t> ordinals; std::transform(s.begin(), s.end(), std::back_inserter(ordinals), [](unsigned char c) -> std::size_t { return c; }); 그러나 그것은 또한 말합니다 : std::transformunary_op또는의 순서대로 적용 할 수있는 것은 아닙니다 binary_op. 시퀀스에 순서대로 함수를 적용하거나 시퀀스의 요소를 수정하는 함수를 적용하려면을 사용하십시오 std::for_each. 이것은 아마도 병렬 구현을 허용하는 …


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