我很确定我在一个权威来源上阅读(我相信它是在WG21页面上),C++ 03 不是 C++ 98的技术勘误,但它是C++标准的新版本.
但是,尽管如此,我只看到-std=c++98GCC和其他编译器的转换,而Alf P Steinbach发表了一些评论,暗示它可能确实是C++ 98的TC.
所以当我写"C++ 03"时,它是否足以提及C++ 98?作为一个相关问题,使用术语"C++ 03" 甚至是错误的吗?因为我认为如果它真的是C++ 98 TC1,那么在我看来它不能被称为C++ 03.正如我从未见过有人为C99TC3版本编写C07.
是否有一种更简单的方法让类的构造函数指定内置类型的所有成员都应该进行零初始化?
此代码段出现在另一篇文章中:
struct Money
{
double amountP, amountG, totalChange;
int twenty, ten, five, one, change;
int quarter, dime, nickel, penny;
void foo();
Money() {}
};
Run Code Online (Sandbox Code Playgroud)
事实证明,问题是对象是通过实例化Money mc;而变量未初始化的.
建议的解决方案是添加以下构造函数:
Money::Money()
: amountP(), amountG(), totalChange(),
twenty(), ten(), five(), one(), change()
quarter(), dime(), nickel(), penny()
{
}
Run Code Online (Sandbox Code Playgroud)
但是,这很丑陋而且不便于维护.添加另一个成员变量并忘记将其添加到构造函数中的长列表中会很容易,当未初始化的变量突然停止0偶然时,可能会导致难以找到的错误数月.