我的这个问题在Cpp.sh上被复制,C ++ 14被激活(我不知道这是否相关......)
我有这个程序:
// Example program 1
#include <iostream>
#include <vector>
class Constants
{
public:
static const int64_t constant_1 = -123;
};
int main()
{
std::vector<int64_t> vec;
vec.push_back(static_cast<int64_t>(Constants::constant_1));
std::cout << vec.size() << std::endl;
}
输出结果为:
1
现在我尝试删除static_cast
。这给了我这个程序:
// Example program 2
#include <iostream>
#include <vector>
class Constants
{
public:
static const int64_t constant_1 = -123;
};
int main()
{
std::vector<int64_t> vec;
vec.push_back(Constants::constant_1);
std::cout << vec.size() << std::endl;
}
这给出了以下输出:
/tmp/cceayEj1.o: In function `main':
:(.text.startup+0x2): undefined reference to `Constants::constant_1'
collect2: error: ld returned 1 exit status
我的理解是可以在类声明(How to initialize a static const member in C++?)中初始化静态成员,所以我猜这与初始化无关。
为什么我的exampel计划中必须static_cast
?