Const Struct против Struct с членами Const - PullRequest
0 голосов
/ 29 марта 2020

Есть ли разница между этими двумя?

typedef struct {
    unsigned int day;
    unsigned int month;
    unsigned int year;
}birthday_t;

typedef struct {
    const birthday_t birthday;
    const unsigned int id;
}person_t;

person_t person = {
    .birthday = {1,20,2000},
    .id = 123};

И

typedef struct {
    unsigned int day;
    unsigned int month;
    unsigned int year;
}birthday_t;

typedef struct {
    birthday_t birthday;
    unsigned int id;
}person_t;

const person_t person = {
    .birthday = {1,20,2000},
    .id = 123};

Если элемент внутри структуры является константным, но структура не является константой (вверху), это отличается от структуры const с неконстантными элементами (внизу)?

Ответы [ 2 ]

4 голосов
/ 29 марта 2020

Основным отличием является намерение.

typedef struct {
    const birthday_t birthday;
    const unsigned int id;
}person_t;

говорит, что person_t никогда не сможет изменить его birthday или id.

const person_t person = {
    .birthday = {1,20,2000},
    .id = 123};

(при условии второго delcaration из person_t) говорит, что этот конкретный c человек не может изменить birthday или id, но другие объекты человека могут.

2 голосов
/ 30 апреля 2020

здесь вы сделали все лица должны иметь постоянную (день рождения и идентификатор)

typedef struct {
    const birthday_t birthday;
    const unsigned int id;
}person_t;
```````````````````
but here you made one person struct should be constant but other not
```````````````
const person_t person = {
    .birthday = {1,20,2000},
    .id = 123};
``````````

...