초기화 목록에 추가 중괄호가 필요한 경우
C에서 이니셜라이저 목록은 집계 객체 또는 배열을 초기화하는 편리한 방법을 제공합니다. 그러나 std::array 및 집계 구조와 같은 특정 데이터 구조로 작업할 때 구문에 추가 중괄호가 필요하므로 많은 프로그래머가 그 이유를 궁금해합니다.
std::array에서 추가 중괄호의 필요성
std::array는 집계 데이터 유형으로 선언되는 고정 크기 컨테이너입니다. 즉, 사용자 정의 생성자가 없습니다. 집계로서 std::array는 내부 배열을 포함하여 해당 멤버를 직접 초기화합니다.
내부 배열을 직접 초기화하려면 추가 중괄호가 필요합니다. 다음 예를 고려하십시오.
std::array<int> a1 = {{0, 1}, {2, 3}};</int>
여기서 {0, 1} 및 {2, 3} 주위의 중괄호는 초기화가 a1 내의 내부 배열에 대한 것임을 나타내기 때문에 필수적입니다. 이러한 중괄호가 없으면 너무 많은 초기화 프로그램으로 인해 코드에서 컴파일 오류가 발생합니다.
기본 유형에 대한 추가 중괄호 부족
std::array와 달리 double과 같은 기본 유형은 그렇지 않습니다. 초기화 목록에 추가 중괄호가 필요합니다. 이는 집계가 아니기 때문입니다. 예:
std::array<double> a2 = {0.1, 2.3};</double>
이 경우 a2는 double 값의 배열입니다. double은 집계가 아니기 때문에 초기화에는 내부 배열이 포함되지 않으며 추가 중괄호가 필요하지 않습니다.
다른 예
추가 중괄호에 대한 요구 사항은 std::array 이상으로 확장됩니다. . 집계와 관련된 다른 유형에도 필요합니다. 예를 들면 다음과 같습니다.
struct B { int foo[2]; }; B meow1 = {1, 2}; // OK (fully-braced) B bark1 = {{1, 2}}; // OK (extra braces for inner aggregate) struct C { int a, b; }; C meow2 = {1, 2}; // OK (completely elided braces) C bark2 = {{1, 2}}; // OK (extra braces for inner aggregate) struct D { int foo[2]; }; D meow3 = {{1, 2}, {3, 4}}; // error (neither braced-elided nor fully-braced) D bark3 = {{{1, 2}, {3, 4}}}; // OK (extra braces for inner aggregate)
결론
요약하자면, std::array 및 특정 구조와 같은 집계를 초기화할 때 초기화 목록에 추가 중괄호가 필요합니다. 왜냐하면 내부 배열의 초기화를 나타내기 때문입니다. 집계의 구성원입니다. 이러한 차이점을 이해하는 것은 컴파일 오류를 방지하고 해당 데이터 구조의 올바른 초기화를 보장하는 데 중요합니다.
위 내용은 C 이니셜라이저 목록에 추가 중괄호가 필요한 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

GULC는 최소 오버 헤드, 공격적인 인라인 및 컴파일러 최적화 우선 순위를 정하는 고성능 C 라이브러리입니다. 고주파 거래 및 임베디드 시스템과 같은 성능 크리티컬 애플리케이션에 이상적 인 디자인은 단순성, 모듈을 강조합니다.

이 기사는 기본 (int, float, char 등), 파생 (배열, 포인터, 스트러크) 및 공극 유형을 포함하는 C 함수 리턴 유형에 대해 자세히 설명합니다. 컴파일러는 함수 선언과 반환 명령문을 통해 반환 유형을 결정합니다.

이 기사는 C 함수 선언 대 정의, 인수 통과 (값 및 포인터 별), 리턴 값 및 메모리 누출 및 유형 불일치와 같은 일반적인 함정을 설명합니다. 모듈성 및 Provi에 대한 선언의 중요성을 강조합니다.

이 기사는 문자열 케이스 변환에 대한 C 기능을 자세히 설명합니다. ctype.h의 toupper () 및 tolower ()를 사용하고 문자열을 통한 반복 및 널 터미네이터를 처리합니다. ctype.h를 잊어 버리고 문자 그럴을 수정하는 것과 같은 일반적인 함정은 다음과 같습니다.

이 기사에서는 C 기능 반환 값 저장을 검사합니다. 작은 반환 값은 일반적으로 속도 레지스터에 저장됩니다. 더 큰 값은 포인터에 메모리 (스택 또는 힙)를 사용하여 수명에 영향을 미치고 수동 메모리 관리가 필요할 수 있습니다. 직접 ACC

이 기사는 형용사 "별개", 문법 기능, 공통 문구 (예 : "구별", "뚜렷하게 다른") 및 공식 대 비공식의 미묘한 응용 프로그램의 다각적 인 사용을 분석합니다.

이 기사에서는 컨테이너, 반복자, 알고리즘 및 함수 인 핵심 구성 요소에 중점을 둔 C 표준 템플릿 라이브러리 (STL)에 대해 설명합니다. 일반적인 프로그래밍을 가능하게하기 위해 이러한 상호 작용, 코드 효율성 및 가독성 개선 방법에 대해 자세히 설명합니다.

이 기사는 효율적인 STL 알고리즘 사용을 자세히 설명합니다. 데이터 구조 선택 (벡터 대 목록), 알고리즘 복잡성 분석 (예 : std :: sort vs. std :: partial_sort), 반복자 사용 및 병렬 실행을 강조합니다. 일반적인 함정과 같은


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)
