Tôi không thể tưởng tượng điều này chưa trùng lặp, nhưng tôi không thể dễ dàng tìm thấy câu trả lời vì các tình huống phức tạp hơn đặc biệt đối với C++ dường như thống trị cuộc thảo luận .Lấy địa chỉ của tham số tạm thời (hợp chất theo nghĩa đen) trong C
Có hợp pháp để lấy địa chỉ của một tạm thời được xây dựng trong danh sách tham số của một cuộc gọi hàm trong C99?
Ví dụ, một cái gì đó giống như init_list
hoặc init_desig_init
như sau:
typedef struct {
int x;
int y;
} point_t;
int manhattan(point_t *p) {
return p->x + p->y;
}
int init_list() {
return manhattan(&(point_t){1, 2});
}
int init_desig_init() {
return manhattan(&(point_t){.x = 1});
}
Big Three seem to compile it OK, nhưng tôi có thể không thực sự tìm thấy một tài liệu tham khảo giải thích rằng tuổi thọ của tạm thời sẽ được mở rộng tại ít nhất thông qua cuộc gọi hàm.
Khi nó quay ra, dựa trên câu trả lời của MM dưới đây, một phần của vấn đề tìm kiếm của tôi đã vì tôi đang tìm kiếm thông tin về temporaries, trong khi thuật ngữ C chính xác cho đặc biệt này cấu trúc khởi tạo là hợp chất theo nghĩa đen.
Tôi nên gọi nó là "ba nền tảng lớn" thực sự, theo sự tôn trọng đối với MSVC, nhưng thực sự tôi thực sự chỉ có nghĩa là "trình biên dịch hỗ trợ của trình biên dịch C".
Câu trả lời bạn nhận được là tốt, nhưng có một chút Gotcha mà đáng ghi nhớ khi bạn bắt đầu sử dụng các chữ ghép phức tạp hơn: http://stackoverflow.com/questions/34880638/compound-literal-lifetime-and-if-blocks – Art
@Art - điểm rất tốt. Vì nó đã không đủ cố gắng để nhớ các quy tắc suốt đời khác nhau cho các chữ kép trong C so với thời gian trong C++ ... – BeeOnRope