代码:
class Foo
{
public:
Foo() = delete;
};
发布于 2018-04-13 18:48:46
代码:
//deleted constructor
class Foo
{
public:
Foo() = delete;
public:
static void foo();
};
void Foo::foo()
{
Foo f; //illegal
}
与
//private constructor
class Foo
{
private:
Foo() {}
public:
static void foo();
};
void Foo::foo()
{
Foo f; //legal
}
发布于 2018-04-13 20:07:59
我遇到了在LLVM的源代码中声明为'deleted'的默认ctors(例如在AlignOf.h中)。关联的类模板通常位于名为'llvm :: detail'的特殊名称空间中。我认为那里的全部目的是他们认为那个阶级只是作为辅助阶级而已。他们从未打算实例化它们。只有在其他类模板的上下文中使用它们,才能在编译时运行一些元编程技巧。
例如:有AlignmentCalcImpl类模板,该模板仅在名为AlignOf的另一个类模板中用作sizeof(。)运算符的参数。该表达式可以在编译时进行评估, 并且不需要实例化模板 。
https://stackoverflow.com/questions/-100003873
复制相似问题