[英]Why C++ doesn't default construct return value when return statement is not specified?
根据C ++标准函数,不返回值将产生未定义的行为。 对于我们没有构造函数的C语言来说,这是合理的,但是为什么这在C ++ 11/14/17中没有得到解决?
我认为,如果在执行过程中没有发生return语句,则默认构造返回值是很自然的。 这将使代码更清洁,更安全,而不会破坏与旧C ++和C代码的兼容性。
相比:
optional<int> foo() try {
return some_complex_computation();
} catch (err1& e) {
LOG << e;
return none;
} catch (err2& e) {
LOG << e;
return none;
} catch (err3& e) {
LOG << e;
// oops, undefined behaviour
}
而只是
optional<int> foo() try {
return some_complex_computation();
} catch (err1& e) {
LOG << e;
} catch (err2& e) {
LOG << e;
} catch (err3& e) {
LOG << e;
}
返回默认构造的值可能比未定义的行为好,但比当前的事务状态差,这是大多数编译器会在(或可能)到达非void函数的右括号时发出警告。
在编译时捕获错误始终是最好的,而当前规则使编译器开发人员可以灵活地做到这一点。 通过添加默认返回值,您可以模糊好代码和坏代码之间的界限。
我建议您阅读Raymond Chen的博客文章,其中他讨论正确的代码还不够,您需要能够在检查中告诉您IS是正确的。 而且他不是唯一的一位,其他知名专家也说过同样的话。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.