Truyền mảng theo tham chiếu C++

Khi thiết kế một hàm chấp nhận một mảng C trong C++, cá nhân tôi sẽ chọn chuyển qua con trỏ tới một mảng hầu như mọi lúc. Gần đây, tôi nhận ra rằng việc chuyển tham chiếu đến một mảng thực sự có lợi hơn trong một số trường hợp sử dụng vì chúng ta có thể sử dụng trình vòng lặp C++ cho mảng C và tận dụng lợi thế của nhiều thuật toán và vùng chứa STL

Trong bài đăng trên blog này, tôi muốn thảo luận nhanh về việc chuyển một mảng C đến một hàm thông qua con trỏ và tham chiếu

Mảng truyền C++ theo tham chiếu VS theo con trỏ

Lưu ý chính khi truyền một mảng cho một hàm là chúng ta có thể đã truyền một con trỏ ngay cả khi chúng ta nghĩ rằng mình đã truyền một tham chiếu. Các mảng như T arr[N]T arr[] trong chữ ký hàm đều phân rã thành con trỏ. Cách chính xác để chuyển qua tham chiếu là sử dụng T [&arr][N]

Truyền theo con trỏ và truyền theo tham chiếu đến mảng đôi khi không tạo ra quá nhiều khác biệt trong thực tế. Nhưng nếu đi qua con trỏ, chúng tôi sẽ mất lợi ích của việc sử dụng các trình vòng lặp sizeof và C++ trong một số trường hợp sử dụng

pass_array. cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include 
#include

// C style interface
template
void print_array_by_pointer[T* arr, size_t N]
// This is equivalent to
// template
// void print_array_by_pointer[T arr[], size_t N]
{
// arr is a pointer.
std::cout

Chủ Đề