【发布时间】:2010-02-09 06:33:34
【问题描述】:
先写一些代码:
class CInner {
public:
CInner( const CInner& another ) { //impl here }
private:
// some member variables
}
class COuter {
public:
COuter( const CInner& inner ) : inner( inner ) {}
private:
CInner inner;
}
是的,COuter::COuter( const CInner& ) 中的参数与成员变量同名。
在 VC++ 中有效 - VC++ 认为使用参数初始化成员变量是合理的,这就是发生的情况 - CInner::inner 使用参数初始化。但是当它用 GCC 编译时,它会以另一种方式解释:GCC 初始化 CInner::inner 用它自己,所以它没有初始化。
哪个编译器是对的?
【问题讨论】:
-
是什么让你觉得 gcc 会用自己初始化
inner? -
肯定有其他问题,我知道没有 GCC 版本有问题,而且它符合标准。顺便说一句,您的描述与您的代码不符 - 您谈论的是
CInner::inner,但代码中只有COuter::inner。 -
显示问题的示例将很有用。你如何确定
inner是如何被初始化的? -
@sharptooth:嗯,我确实试过了,很容易看出在我的例子中一切都被正确初始化了。这就是为什么我要问有问题的案例应该是什么样子。
-
我以前用 GCC 做的,我只是用我目前使用的当前版本的 GCC 测试它。据我记得,它过去可以正常工作,现在也可以正常工作。您使用的是什么版本的 GCC?
标签: c++ visual-c++ gcc initialization