繁体   English   中英

当未指定return语句时,为什么C ++没有默认构造返回值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM