测试代码:
// Test1.hpp
#pragma once
#include <iostream> // std::cin std::cout std::cerr
#include <memory> // std::shared_ptr
#include <string> // std::string
namespace MyTest
{
class TestClass1
{
public:
void PrintDefaultIntMember() const
{
std::cout << "var int = " << m_num << std::endl;
}
void PrintDefaultBoolMember() const
{
std::cout << "var bool = " << m_b << std::endl;
}
void PrintDefaultDoubleMember() const
{
std::cout << "var double = " << m_d << std::endl;
}
void PrintDefaultStringMember() const
{
std::cout << "var std::string = " << m_str << std::endl;
}
void PrintDefaultPtrMember() const
{
std::cout << "ptr init to nullptr? " << (m_buf == nullptr ? "true" : "false") << std::endl;
}
private:
int m_num;
double m_d;
bool m_b;
std::string m_str; // 带默认构造函数的类对象
char* m_buf;
};
/// 测试C++中各种类成员变量的默认值
void MyTest1()
{
std::cout << "new TestClass1:" << std::endl;
std::shared_ptr<TestClass1> t1(new TestClass1);
t1->PrintDefaultIntMember();
t1->PrintDefaultDoubleMember();
t1->PrintDefaultBoolMember();
t1->PrintDefaultPtrMember();
t1->PrintDefaultStringMember();
std::cout << "================================" << std::endl;
std::cout << "new TestClass1():" << std::endl;
std::shared_ptr<TestClass1> t2(new TestClass1());
t2->PrintDefaultIntMember();
t2->PrintDefaultDoubleMember();
t2->PrintDefaultBoolMember();
t2->PrintDefaultPtrMember();
t2->PrintDefaultStringMember();
std::cout << "================================" << std::endl;
std::cout << "new int array without ():" << std::endl;
int* arr1 = new int[10];
for (int i = 0; i < 10; ++i) {
std::cout << arr1[i] << " ";
if (i == 9) {
std::cout << std::endl;
}
}
std::cout << "================================" << std::endl;
std::cout << "new int array with ():" << std::endl;
int* arr2 = new int[10]();
for (int i = 0; i < 10; ++i) {
std::cout << arr2[i] << " ";
if (i == 9) {
std::cout << std::endl;
}
}
delete[] arr1; arr1 = nullptr;
delete[] arr2; arr2 = nullptr;
}
}
// main.cpp
#include "Test1.hpp"
int main()
{
MyTest::MyTest1();
return 0;
}
MSVC2015、GCC 7.3.0 测试结果:
new TestClass1:
var int = -842150451
var double = -6.27744e+66
var bool = 205
ptr init to nullptr? false
var std::string =
================================
new TestClass1():
var int = 0
var double = 0
var bool = 0
ptr init to nullptr? true
var std::string =
================================
new int array without ():
-842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451
================================
new int array with ():
0 0 0 0 0 0 0 0 0 0