我在阅读源代码时遇到了一个简单的问题.AFAIK,构造函数的名称应与声明的类相同.但是,以下代码具有不同的名称作为构造函数.任何人都可以告诉我为什么这段代码有效?
class directFieldMapper
:
public FieldMapper
{
const labelUList& directAddressing_;
bool hasUnmapped_;
public:
// Constructors
//- Construct given addressing
patchFieldSubset(const labelUList& directAddressing)
:
directAddressing_(directAddressing),
hasUnmapped_(false)
{
if (directAddressing_.size() && min(directAddressing_) < 0)
{
hasUnmapped_ = true;
}
}
//- Destructor
virtual ~directFieldMapper()
{}
}
Run Code Online (Sandbox Code Playgroud)
好的,我发现这个类不在Makefile的源代码列表中.所以,这个类永远不会被编译.
是否有可能让构造函数具有不同的名称作为类声明?
没有.
AFAIK,构造函数的名称应与声明的类相同.
正确.
但是,以下代码具有不同的名称作为构造函数.
根据C++标准,代码格式不正确.
任何人都可以告诉我为什么这段代码有效?
如果它工作,那么它是由于一些语言扩展.您可以参考编译器手册,了解它提供的语言扩展,以及如何启用/禁用它们.
由于格式错误,所有编译器都需要发出诊断消息,否则它们不符合要求.GNU编译器的示例输出:
error: ISO C++ forbids declaration of 'patchFieldSubset' with no type [-fpermissive]
patchFieldSubset(const labelUList& directAddressing)
^
warning: non-static reference 'const labelUList& directFieldMapper::directAddressing_' in class without a constructor [-Wuninitialized]
const labelUList& directAddressing_;
^~~~~~~~~~~~~~~~~
error: expected ';' after class definition
}
^
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |