为什么删除的默认构造函数没有捕获此内容?
Why doesn't a deleted default constructor catch this?
我注意到,尽管删除了默认构造函数,但用显式()
声明类的实例并不会引发错误,这是为什么?
class Foo {
public:
Foo() = delete;
};
int main() {
//Foo foo; // Throws an error as expected
Foo bar(); // Does not throw an error
return 0;
}
编译调用:g++ -std=c++14 foo.cpp
不幸的是,Foo bar()
是函数的声明,它返回Foo
,不接受任何参数。
请参阅最麻烦的解析
相关文章:
- 我什么时候会默认(而不是删除)基类中的复制和移动操作
- 注意:"Entity_c::Entity_c(const Entity_c&)"被隐式删除,因为默认定义格式不正确:
- 删除显式默认函数声明时的警告
- 删除使数据处于"错误状态"的默认构造函数的模式?
- 为什么删除默认构造函数 A::A() 时会编译"A a{};"?
- 为什么这不是"调用隐式删除的'QQmlElement'的默认构造函数"中的默认构造函数
- 默认移动成员定义为已删除,而未定义特殊成员?
- 删除复制构造函数是否也会删除默认的复制/移动运算符?
- 是否可以默认初始化具有已删除默认构造函数的类类型
- 为什么删除默认参数会破坏此 constexpr 计数器?
- 如果构造函数被显式默认或删除,为什么聚合初始化自 C++20 以来不再起作用
- 为什么在派生类中删除默认构造函数
- 删除默认类构造函数有什么意义?
- 有条件地实例化具有删除默认构造函数的类
- 何时应删除默认的移动构造函数时令人困惑的事情
- 删除默认C++复制和移动构造函数和赋值运算符的缺点
- 为什么可以删除任何函数,而只能删除默认的特殊成员函数
- 已删除默认构造函数.仍然可以创建对象..有时
- 了解Lambda闭包类型如何删除默认构造函数
- 使用boost program_options处理帮助消息,删除默认值或重新格式化帮助消息