Pra*_*lla 2 c++ constructor const
这是一个简单的程序.如果我评论构造函数,我得到一个错误只是想检查这是什么原因?
t.cc: In function 'int main(int, char**)':
t.cc:26: error: uninitialized const 'const_test'
#include <iostream>
using namespace std;
class TestPrint
{
public:
// TestPrint() {}
void Print()
{
std::cout << "TestPrint" << std::endl;
}
void Print() const
{
std::cout << "const TestPrint" << std::endl;
}
};
int main(int argc, char* argv[])
{
TestPrint normal_test;
normal_test.Print();
const TestPrint const_test;
const_test.Print();
}
Run Code Online (Sandbox Code Playgroud)
这确实是不合理的.第8.5节/ 9:
如果没有为对象指定初始化程序,并且该对象是(可能是cv限定的)非POD类类型(或其数组),则该对象应默认初始化; 如果对象是const限定类型,则底层类类型应具有用户声明的默认构造函数.否则,如果没有为非静态对象指定初始化程序,则该对象及其子对象(如果有)具有不确定的初始值; 如果对象或其任何子对象是const限定类型,则程序格式错误.
强调我的.任何未对您的程序发出诊断的编译器都不符合(查看MSVC).一个更简单的测试:
struct foo {};
int main()
{
const foo f;
}
Run Code Online (Sandbox Code Playgroud)
这个想法很简单:常量需要初始化为某些东西.如果没有用户定义的构造函数,则表示没有初始化.