«Static const» против «#define» против «enum»

Опубликовано: 30 Декабря, 2021

В этой статье мы будем анализировать «static const», «#define» и «enum» . Эти три часто сбивают с толку, и выбор того, какой из них использовать, иногда может быть сложной задачей.

статическая константа

static const: «static const» в основном представляет собой комбинацию static (спецификатор хранилища) и const (квалификатор типа).

Статический: определяет время жизни и видимость / доступность переменной. Это означает, что если переменная объявлена как статическая переменная, она будет оставаться в памяти все время, пока выполняется программа, в то время как обычные или автоматические переменные уничтожаются, когда функция (где переменная была определена) завершается.
Const: квалификатор типа. Квалификатор типа используется для выражения дополнительной информации о значении через систему типов. Когда переменная инициализируется с использованием квалификатора типа const, она не принимает дальнейшее изменение своего значения.
Итак, комбинируя static и const, мы можем сказать, что когда переменная инициализируется с использованием static const, она будет сохранять свое значение до выполнения программы, а также не будет принимать никаких изменений в своем значении.

Синтаксис:

static const data_type name_of_variable = initial_value;

«Что такое #define»?

Его часто неверно истолковывают как программный оператор. Но на самом деле он устанавливает макрос . Макрос вызывает замену текста перед компиляцией. Чтобы узнать больше о макросах, обратитесь к статье macros_vs_function.

Синтаксис:

#define token [значение]

ПРИМЕЧАНИЕ: в токене не должно быть пробелов, значение может содержать пробелы.
Пример:

 #define ll long long int 
// C++ program to demonstrate
// the use of #define
#include <bits/stdc++.h>
// defining long long int as => ll
#define ll long long int
// defining for loop
#define f(i, a, b, c) for (ll i = a; i < b; i += c)
using namespace std;
// function to count to a given number
void count(ll input)
{
// loop implemented using macros
// for(long long int j=1; j<input+1;j+=1)
f(j, 1, input + 1, 1)
{
cout << j << " " ;
}
cout << endl;
}
int main()
{
// ll will get replaced by
// long long int
ll num = 10;
count(num);
return 0;
}
Выход:
1 2 3 4 5 6 7 8 9 10

Что такое перечисление?

Перечисление - это определяемый пользователем тип данных. Он используется для присвоения имен интегральным константам, чтобы улучшить читаемость кода. Для использования перечисления в C / C ++ используется ключевое слово «enum».

Синтаксис:

enum flag {константа1 = 2, константа2 = 3, константа3 = 4 ....};

«Enum» отличается от «#define» тем, что оно автоматически присваивает значения переменным. В предыдущем примере, если значения не были присвоены =>

перечисление {константа1, константа2, константаd3 ...}

Переменным будут автоматически присвоены значения (constant1 = 0, constant2 = 1, constant3 = 2…). Использование enum вместо макросов дает различные преимущества. Один из них - автоматическое присвоение значений.

// C++ program to demonstrate
// the use of enum
#include <bits/stdc++.h>
using namespace std;
int main()
{
// declaring weekdays data type
enum weekdays { mon,
tues,
wed,
thurs,
fri,
sat,
sun };
// a variable named day1 holds the value of wed
enum weekdays day1 = wed;
// mon holds 0, tue holds 1 and so on
cout << "The value stored in wed is :" << day1 << endl;
// looping through the values of
// defined integral constants
for ( int i = mon; i <= sun; i++)
cout << i << " " ;
cout << endl;
return 0;
}
Выход:
В wed хранится значение: 2.
0 1 2 3 4 5 6

Дополнительные сведения о перечислении см. В статье «Перечисление (или перечисление) в C».

Хотите узнать о лучших видео и практических задачах, ознакомьтесь с базовым курсом C ++ для базового и продвинутого уровня C ++ и курсом C ++ STL для базового уровня плюс STL. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .