在类的默认ctor中初始化std :: vector时,我遇到了GCC-4.8的某些奇怪行为。我的代码如下:
class TestLogger final: public Logger
{
public:
void LogWarning(const std::string& msg,) const override{
this->mWarningMessages.emplace_back(msg);
}
bool ContainsWarnings() const{
return !this->mWarningMessages.empty();
}
private:
mutable std::vector<std::string> mWarningMessages; // needs to be mutable because it's changed by const method
};
如果我使用类TestLogger
的某个对象会发生什么?该成员mWarningMessages
似乎未初始化。
请参见以下代码:
int main(int argc, char *arcv[])
{
TestLogger logger;
bool shouldBeFalse = logger.ContainsWarnings() // --> false expected, but returns true;
}
如果我使用初始化器列表中的TestLogger
来实现类mWarningMessages
的默认构造函数,则一切正常。
有人知道为什么没有默认ctor的代码无法正常工作吗?我希望mWarningMessage
被类TestLogger
的自动生成的默认ctor正确初始化。这可能是GCC-4.8中的错误吗?
感谢您的帮助