如果删除了构造函数,为什么允许写Test object(); Test object{};
?
编写Test object();
并不意味着在删除构造函数的情况下创建类对象,编译器理解了一个函数,这就是为什么当您尝试编写std::cout << sizeof(object)
时会得到错误:ISO C++ forbids applying sizeof to an expression of function type
。我可以理解,它不为向后兼容而被弃用,但是可以在C ++ 11中对其进行优化和修复,但不能这样做。
从C ++ 11开始,您可以使用Test object3{};
语法创建对象,即使删除了构造方法,该语法也已经是有效对象,并且在执行std::cout << sizeof(object3)
时输出为{{1 }}。在这种情况下,这意味着操作符1
是无用的。与在旧版本的delete
部分中写入操作符相同。
当您要创建函数集合并进行封装时,可以使用这种样式的代码。因此,请不要在答案中写例如private
等...
Why do you use class instead of namespace