假设我有以下代码:
class Foo
{
private this(int x){ }
}
void
main()
{
auto f = new Foo(4);
}令我惊讶的是,这实际上是编译出来的。我希望私有构造函数在它定义的类之外是不可用的,就像方法一样,但情况显然并非如此。语言引用甚至在构造函数部分中都没有提到访问修饰符。
因此,问题有两个:当访问修饰符应用于构造函数时(如果它做了任何事情),访问修饰符会做什么,以及如何隐藏一个ctor?
发布于 2017-08-16 18:51:17
构造函数上的访问修饰符与其他地方的访问修饰符完全一样.但是要记住的关键是,在D中,访问控制只适用于模块之外。同一模块中的所有内容也可以看到其内部的其他所有内容,但是私有ctor将阻止模块外的构造。
这与许多其他编程语言不同。其思想是,D模块允许您定义助手类,而不需要C++的friend特性。
https://stackoverflow.com/questions/45720803
复制相似问题