До 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