Đúng như dự đoán, trình biên dịch (VisualStudio 2008) sẽ đưa ra một cảnh báoChức năng với giá trị trả về mất tích, hành vi trong thời gian chạy
cảnh báo C4715: 'doSomethingWith': không tất cả các con đường kiểm soát trả về một giá trị
khi biên dịch đoạn mã sau:
int doSomethingWith(int value)
{
int returnValue = 3;
bool condition = false;
if(condition)
// returnValue += value; // DOH
return returnValue;
}
int main(int argc, char* argv[])
{
int foo = 10;
int result = doSomethingWith(foo);
return 0;
}
Nhưng chương trình chỉ chạy tốt. Giá trị trả về của hàm doSomethingWith() là 0.
Chỉ là hành vi không xác định, hoặc có một quy tắc nhất định như thế nào giá trị kết quả được tạo ra/được tính khi chạy. Điều gì sẽ xảy ra với các kiểu dữ liệu không phải POD dưới dạng giá trị trả về?
Hãy xem câu trả lời này: http://stackoverflow.com/questions/1610030/why-can-you-return-from-a-non-void-function-without-returning-a-value- không-pro/1610454 # 1610454 –
@fnieto: Ah, tôi hiểu rồi, đây là một câu trả lời rất hay. Đã không tìm thấy nó bản thân mình mặc dù, trước khi yêu cầu ... – nabulke