▲GN⁺ 2024-07-06 | parent | ★ favorite | on: 생성자 없는 초기화 필요성(consteval.ca)Hacker News 의견 t의 초기화 결과는 0이 될 것임 이는 t가 값 초기화되고, T가 사용자 정의 기본 생성자가 없기 때문에 객체가 0으로 초기화된 후 기본 생성자가 호출되기 때문임 기본 생성자는 멤버를 기본 초기화하며, 값 초기화와는 다름 GCC는 이에 동의하는 것 같음 작성자가 실제로 x를 값 초기화하고 있다는 것을 놓쳤음 결과는 기대와 다르게 나옴 규칙의 세부 사항은 복잡하고 때로는 비합리적인 부분이 있음 그러나 대부분의 경우 기대한 결과를 얻을 수 있음 기본 초기화를 명시적으로 만드는 것이 큰 개선점이 될 것임 값 초기화가 일반적이기 때문에 기본 초기화를 원할 때 주석을 작성해야 함 "std::array<int, 100> = void;"와 같은 구문이 더 나을 것임 리스트 초기화와 집합 초기화 사이의 연결고리는 리스트 초기화가 집합에 대해 수행될 때 집합 초기화가 수행됨 단, 리스트에 하나의 인수만 있는 경우 직접 초기화가 수행됨 한 요소의 경우는 두 개 이상의 요소와 다르게 작동함 이는 매개변수 팩에서 구조체를 생성하는 것이 점점 더 간단해지는 언어에서 발생함 자신의 생성자를 작성할 수 있으며, 하나의 요소만 제공된 튜플이나 배열을 초기화할 수 있음 그러나 특수한 경우 잘못된 생성자가 호출될 수 있음 C++11 초기화 리스트가 처음 나왔을 때 이를 발견하고 미쳤다고 생각했음 "I Have No Mouth, and I Must Scream" (1967) 언급 T::T() = default; 구문 사용 출력 결과가 0이 될 것이라고 기대하지만 실제로는 쓰레기 값이 나올 것임 일부 것들은 완벽할 수 없음 라이브러리 소비자가 라이브러리의 동작을 변경할 수 있게 함 더 많은 C++의 복잡함을 원한다면 C++ FQA를 추천함 15년이 지났지만 C++는 오래된 기능이나 동작을 거의 제거하지 않기 때문에 여전히 유효함 블로그 테마가 DEC 시대의 컴퓨터에서 영감을 받았지만 깔끔하고 미니멀함 신선함 이 내용을 읽으면 어지러움을 느끼게 됨 Java 생성자와 객체 초기화를 이해하려고 했던 기억이 남 Go와 Rust는 특별한 생성자가 없어서 많은 부분이 단순해짐 생성자를 사용하지 않게 된 후 생성자를 그리워한 경험이 있는지 궁금함 모든 암묵적인 동작을 보여주는 C++ 도구가 있는지 궁금함 예를 들어 추가된 모든 생성자, 암묵적 복사 생성자 등 클래스에 대해 잘못된 정보를 제공함 생성자를 선언한 경우 기본 생성자를 제공하지 않으며 기본 초기화는 컴파일러 진단과 함께 실패함 "T t;"는 "아무것도 하지 않는다"는 주장은 잘못됨 예시 코드에서 T t;는 실패함 블로그 헤더에 DEC 전면 패널이 있음
Hacker News 의견
t의 초기화 결과는 0이 될 것임t가 값 초기화되고,T가 사용자 정의 기본 생성자가 없기 때문에 객체가 0으로 초기화된 후 기본 생성자가 호출되기 때문임기본 생성자는 멤버를 기본 초기화하며, 값 초기화와는 다름
GCC는 이에 동의하는 것 같음
작성자가 실제로
x를 값 초기화하고 있다는 것을 놓쳤음규칙의 세부 사항은 복잡하고 때로는 비합리적인 부분이 있음
기본 초기화를 명시적으로 만드는 것이 큰 개선점이 될 것임
리스트 초기화와 집합 초기화 사이의 연결고리는 리스트 초기화가 집합에 대해 수행될 때 집합 초기화가 수행됨
한 요소의 경우는 두 개 이상의 요소와 다르게 작동함
자신의 생성자를 작성할 수 있으며, 하나의 요소만 제공된 튜플이나 배열을 초기화할 수 있음
C++11 초기화 리스트가 처음 나왔을 때 이를 발견하고 미쳤다고 생각했음
"I Have No Mouth, and I Must Scream" (1967) 언급
T::T() = default;구문 사용출력 결과가 0이 될 것이라고 기대하지만 실제로는 쓰레기 값이 나올 것임
라이브러리 소비자가 라이브러리의 동작을 변경할 수 있게 함
더 많은 C++의 복잡함을 원한다면 C++ FQA를 추천함
블로그 테마가 DEC 시대의 컴퓨터에서 영감을 받았지만 깔끔하고 미니멀함
이 내용을 읽으면 어지러움을 느끼게 됨
Go와 Rust는 특별한 생성자가 없어서 많은 부분이 단순해짐
모든 암묵적인 동작을 보여주는 C++ 도구가 있는지 궁금함
클래스에 대해 잘못된 정보를 제공함
"T t;"는 "아무것도 하지 않는다"는 주장은 잘못됨
T t;는 실패함블로그 헤더에 DEC 전면 패널이 있음