Người phỏng vấn cho tôi xem một mã như thế này và hỏi tôi có nên biên dịch hay không và đưa ra lý do của tôi. Tôi nói với anh ta rất chắc chắn rằng nó sẽ không biên dịch, bởi vì 10 là hằng số và bạn không thể gán hằng số cho tham chiếu không const (như int & b = 10 sẽ không biên dịch), cũng là _a là biến tạm thời và nó là cũng được coi là const, một lần nữa, bạn không thể sử dụng tham chiếu không const để tham chiếu biến const.Tại sao tính toán này? Mong đợi "không thể chỉ định hằng số cho tham chiếu không const"
Tuy nhiên, sau khi tôi trở về nhà với sự ngạc nhiên của mình, tôi thấy nó biên dịch hoàn hảo với tất cả các trình biên dịch có thể. Ngoài ra, tôi đã không nhận được công việc. Phần nào của sự hiểu biết của tôi đã đi sai?
class A {
int& a;
public:
A(int _a):a(_a) {}
};
int main() {
A a(10);
}
Vị trí bạn đang phỏng vấn là gì? Nếu nó là bất cứ điều gì khác hơn là xây dựng một trình phân tích cú pháp C++, tôi muốn nói rằng nó có thể vô lý để cần phải biết từng góc tối nghĩa của C++ như thế này. – Mysticial
Tôi có ấn tượng rằng những người phỏng vấn nhấn mạnh quá nhiều vào việc biết các góc tối nghĩa của ngôn ngữ và không đủ về kỹ năng thiết kế và thực hành tốt nhất. –
@Mysticial: đây là một lỗ hổng phổ biến cho các nhà phát triển mới vì mã này dường như sẽ hoạt động lúc đầu nhưng sẽ không thành công tại một điểm ngẫu nhiên (sau một cuộc gọi hàm). – Dani