Вы можете делать подобные вещи, но у них будет другая семантика.
В классе статическая переменная является объявлением, а не определением, оно все еще требует определения вне класса; объявление переменной в пространстве имен является определением, если вы не пометите как extern
и не предоставите инициализатор.
В вашем случае это не имеет большого значения, поскольку const
переменные имеют внутреннюю связь по умолчанию, поэтому вы можете без проблем иметь несколько определений в программе (по одному на единицу перевода).
1009 * Е.Г. *
class Test
{
static const std::string FILE_NAME;
};
(в некоторых отношениях) эквивалентно:
namespace Test
{
extern const std::string FILE_NAME;
}
Если бы вы сделали это, вы бы объявили FILE_NAME
пустой строкой. Вы не можете переопределить его в другом месте в том же переводчике.
namespace Test
{
const std::string FILE_NAME;
}
Вы могли бы, однако, сделать это.
namespace Test
{
const std::string FILE_NAME = "myfile.txt";
}
Каждая единица перевода будет иметь свою собственную версию Test::FILE_NAME
, но все они будут согласованы.