Итак, я знаю, что в C ++ статические члены могут быть инициализированы внутри класса, если они являются константным литеральным типом, подобным следующему
class test{
public:
static constexpr int stc = 1;
private:
int a = 0;
int b = 0;
int c = 0;
};
и статическая переменная constexpr stc
могут использоваться, когда компилятор может напрямую подставить значение члена, т. Е.
int main () {int array[test::stc];}
Однако, если используется в контексте, где значение не может быть напрямую подставлено компилятором:
int main() { const int &cs = test::stc; }
тогда компилятор (clang) выдает ошибку
c++ -std=c++11 -pedantic t.cpp -o t
Undefined symbols for architecture x86_64:
"test::stc", referenced from:
_main in t-a8ee2a.o
ld: symbol(s) not found for architecture x86_64
, если статический член не определен вне класса, например:
constexpr int test::stc;
Почему это так?