Kể từ khi tôi nhận ra nhiều năm trước, rằng điều này không tạo ra lỗi theo mặc định (ít nhất là trong GCC), tôi luôn tự hỏi tại sao?
Tôi hiểu rằng bạn có thể đưa ra các cờ biên dịch để đưa ra cảnh báo, nhưng không phải lúc nào nó cũng là một lỗi? Tại sao nó có ý nghĩa đối với hàm không rỗng không trả về giá trị là hợp lệ?
Một ví dụ theo yêu cầu trong các ý kiến:
#include <stdio.h>
int stringSize()
{
}
int main()
{
char cstring[5];
printf( "the last char is: %c\n", cstring[stringSize()-1] );
return 0;
}
... biên dịch.
-Werror=return-type
sẽ coi cảnh báo đó là một lỗi. Tôi chỉ bỏ qua cảnh báo và vài phút thất vọng theo dõi một this
con trỏ không hợp lệ dẫn tôi đến đây và đi đến kết luận này.
std::optional
hàm mà không trả về sẽ trả về tùy chọn "đúng"