Это может быть достигнуто с помощью ключевого слова extern
:
// a.cpp
extern const int x = 10; // definition
// b.cpp
extern const int x; // declaration
Эффект, который это даст, заключается в том, что вам не нужно будет перекомпилировать b
, если значение константы изменится на a
, но в то же время вы потеряете возможность использовать x
в качестве постоянной времени компиляции. внутри b.cpp
(т.е. вы не сможете писать int array[x];
).
Если для этого нет очень веской причины, я бы предпочел, чтобы константа была определена в заголовочном файле и была включена во все единицы перевода, для которых она требуется;
// c.h
const int x = 10;
// a.cpp
#include "c.h"
// b.cpp
#include "c.h"
Вам придется перекомпилировать все единицы перевода, которые зависят от константы, с каждым изменением, но вы сможете использовать ее во время компиляции во всех единицах перевода. Ограничением этого подхода является то, что если вы измените константу и перекомпилируете только некоторые единицы перевода, значение константы будет непоследовательным (это нарушение ODR).