Нужны ли нам внешние переменные начиная с C ++ 17? - PullRequest
0 голосов
/ 29 сентября 2019

До C ++ 17 нам нужно было пометить переменную как extern, чтобы разделить ее между различными единицами перевода. В этом случае нам нужно было бы предоставить явное определение переменной в одной единице перевода:

// common.h
extern const std::vector<int> g_numbers;


// a.cpp
#include "common.h"

const std::vector<int> g_numbers = { 1, 2, 3 };

void a() { /* use g_numbers */ }


// b.cpp
#include "common.h"

void b() { /* use g_numbers */ }

Но начиная с C ++ 17 мы можем объявить переменную inline, и компоновщик будет обрабатывать определениепеременной для нас:

// common.h
inline const std::vector<int> g_numbers = { 1, 2, 3 };


// a.cpp
#include "common.h"

void a() { /* use g_numbers */ }


// b.cpp
#include "common.h"

void b() { /* use g_numbers */ }

Учитывая тот факт, что это более удобный и простой способ определения общей переменной, мне интересно, есть ли еще место для extern переменных в C ++17

...