programing

C ++ 구조의 이상한 동작 [1 부]

copyandpastes 2021. 1. 19. 08:19
반응형

C ++ 구조의 이상한 동작 [1 부]


중히 여기다:

struct box
{
    int array[3];
};

int main()
{
    box a = {1};
}

위의 내용이 C ++에서 작동하는 경우 다음이 작동하지 않는 이유는 무엇입니까?

struct box
{
    int simple_int;
};

int main()
{
    box b = 2;
}

그 이유는 무엇입니까?


적절하게 전자는를 사용 box a = { { 1 } }하므로 각 집계에 대해 하나의 중괄호 세트가 있습니다. 외부 중괄호 세트는 구조용이고 내부 세트는 배열 용입니다. 그러나 언어를 사용하면 내부 중괄호를 생략 할 수 있습니다.

후자의 경우 생략 할 내부 중괄호가 없습니다. 외부 중괄호를 생략 할 수 없습니다. 집계에 대한 이니셜 라이저 목록을 구별하려면 하나 이상의 중괄호 세트가 있어야합니다. 어떤 의미에서 중괄호는 "집계 안에 넣을 항목의 목록입니다."라고 말합니다. 를 작성할 때 box b = 2컴파일러는 집계 2 내부 에 넣기를 원하는 것을 알지 못합니다 . 대신 b객체의 일부가 아니라 객체를 2. 따라서 컴파일러는 a 2변경되는 생성자 또는 변환을 찾으려고 합니다 box. 이것이 실패하면 오류가 발생합니다.


구문이 잘못되어 작동하지 않습니다. 원하는 경우 암시 적 생성자를 사용하여 b = 2에 대한 지원을 추가 할 수 있습니다.

box b = {2}; // correct syntax with no constructor

또는

struct box
{
    // implicit constructor
    box(int i) : i(i) {}
    int i;
};

box b(2);
box c = 2;

또는

struct box
{
    explicit box(int i) : i(i) {}
    int i;
};

box b(2);
box c = 2; // disallowed

참조 URL : https://stackoverflow.com/questions/17925909/strange-behaviour-of-structures-in-c-part-1

반응형