Чи є статичні змінні класу такими ж, як і зовнішні змінні, тільки з об'ємом класу?

Мені здається, що статична змінна класу ідентична змінній extern, тому що ви тільки оголосите її в static int x / extern int x і фактично визначити його в іншому місці (зазвичай у файлі .cpp)

статична змінна класу

// .h file
class Foo
{
    static int x ;
} ;

// .cpp file
int MyClass::x = 0 ;

Зовнішні змінні:

// .h file
extern int y;

// .cpp file
int y = 1;

В обох випадках змінна оголошується один раз десь і визначається у файлі, який не буде включено більше одного разу в компіляцію (інакше помилка компонування)

6

3 Відповіді

Так, обидва мають статичну тривалість зберігання і зовнішню зв'язок; вони мають, по суті, ті ж самі властивості часу виконання, які відрізняються лише виразністю (час компіляції).

4
додано

Більш-менш. Обидва мають зовнішні зв'язки і статичні терміни життя. Обидва буде ініціалізовано під час запуску програми та знищено під час виходу.

2
додано

Так.

Як додаткова інформація, в деяких мовах програмування, які використовують необов'язкові простори імен/модулів, статичні змінні класу можуть обмінюватися глобальними змінними.

У деяких випадках, ці інші змінні програмування, навіть не мають статичних змінних класу, і ви можете використовувати глобальні змінні.

Деякі розробники віддають перевагу використанню статичних змінних класу, забезпечуючи зв'язок з класом.

Його також питання про те, як ви проектуєте свою програму, навіть якщо обидві функції доступні.

1
додано
IT KPI C/С++ новым годом
IT KPI C/С++ новым годом
747 учасників

Чат обсуждения С/С++. - Вопросы "напишите за меня лабу" - это оффтоп. - Оффтоп, флуд, оскорбления и вбросы здесь не приняты. - За нарушение - предупреждение или mute на неделю. - За спам и рекламу - ban. Все чаты IT KPI: https://t.me/itkpi/1147