Hướng dẫn c++ pass object by value - C++ truyền đối tượng theo giá trị

Một câu hỏi đơn giản mà tôi không thể tìm thấy câu trả lời ở đây.

Điều tôi hiểu là trong khi chuyển một đối số cho một hàm trong cuộc gọi, ví dụ:

void myFunction(type myVariable)
{
}

void main()
{
    myFunction(myVariable);
}

Đối với các kiểu dữ liệu đơn giản như int, float, v.v ... Hàm được gọi theo giá trị.

Nhưng nếu myVariable là một mảng, chỉ có địa chỉ bắt đầu được truyền (mặc dù chức năng của chúng tôi là một cuộc gọi theo hàm giá trị).

Nếu myVariable là một đối tượng, cũng chỉ có địa chỉ của đối tượng được truyền thay vì tạo một bản sao và truyền nó.

Vì vậy, trở lại câu hỏi. C ++ có chuyển một đối tượng bằng tham chiếu hoặc giá trị không?

Hướng dẫn c++ pass object by value - C++ truyền đối tượng theo giá trị

hỏi ngày 19 tháng 1 năm 2014 lúc 10:10Jan 19, 2014 at 10:10

user3041058user3041058user3041058

1.4502 huy hiệu vàng11 Huy hiệu bạc16 Huy hiệu đồng2 gold badges11 silver badges16 bronze badges

9

Đối số được truyền theo giá trị, trừ khi chữ ký hàm chỉ định khác:

  • Trong void foo(type arg), arg được truyền bởi giá trị bất kể type là loại đơn giản, loại con trỏ hay loại lớp,
  • Trong void foo(type& arg), arg được thông qua bởi tham chiếu.

Trong trường hợp các mảng, giá trị được truyền là một con trỏ tới phần tử đầu tiên của mảng. Nếu bạn biết kích thước của mảng tại thời gian biên dịch, bạn cũng có thể vượt qua một mảng bằng cách tham khảo: int0.

Đã trả lời ngày 19 tháng 1 năm 2014 lúc 10:14Jan 19, 2014 at 10:14

3

C ++ luôn cung cấp cho bạn sự lựa chọn: Tất cả các loại int1 (ngoại trừ các mảng, xem bên dưới) có thể được truyền theo giá trị bằng cách thực hiện loại tham số int1 và được truyền bằng cách tham chiếu bằng cách tạo loại tham số int3, tham chiếu-________ 11.All types int1 (except arrays, see below) can be passed by value by making the parameter type int1, and passed by reference by making the parameter type int3, reference-to-int1.

Khi loại tham số không được chú thích rõ ràng là tham chiếu (int5), nó luôn được truyền bởi giá trị bất kể loại cụ thể. Đối với các loại do người dùng định nghĩa cũng vậy (đó là những gì trình xây dựng bản sao dành cho). Ngoài ra, đối với con trỏ, mặc dù sao chép một con trỏ không sao chép những gì chỉ ra.

Mảng phức tạp hơn một chút. Các mảng không thể được truyền theo giá trị, các loại tham số như int6 thực sự chỉ là cú pháp khác nhau cho int7. Đó không phải là hành động chuyển đến một hàm tạo ra một con trỏ từ một mảng, hầu như mọi hoạt động có thể (không bao gồm một vài hoạt động như int8) làm điều đó. Người ta có thể vượt qua một tham chiếu đến một mảng, nhưng điều này được chú thích rõ ràng dưới dạng tham chiếu: int9 (lưu ý ampersand).

Đã trả lời ngày 19 tháng 1 năm 2014 lúc 10:18Jan 19, 2014 at 10:18

3

C ++ làm cho cả vượt qua giá trị và vượt qua các mô hình tham chiếu có thể.

Bạn có thể tìm thấy hai cách sử dụng ví dụ dưới đây.

http://www.learncpp.com/cpp-tutorial/72-passing-arguments-by-value/

http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/

Các mảng là các cấu trúc đặc biệt, khi bạn chuyển một mảng làm tham số, một con trỏ đến địa chỉ của phần tử đầu tiên được truyền dưới dạng giá trị với loại phần tử trong mảng.

Khi bạn vượt qua một con trỏ dưới dạng tham số, bạn thực sự sẽ tự thực hiện mô hình tham chiếu, như trong C. bởi vì khi bạn sửa đổi dữ liệu trong địa chỉ được chỉ định, bạn sẽ sửa đổi chính xác đối tượng trong hàm người gọi.

Đã trả lời ngày 19 tháng 1 năm 2014 lúc 10:22Jan 19, 2014 at 10:22

Hướng dẫn c++ pass object by value - C++ truyền đối tượng theo giá trị

McVKrmcvkrmcvkr

2.7096 Huy hiệu vàng36 Huy hiệu bạc62 Huy hiệu Đồng6 gold badges36 silver badges62 bronze badges

Trong C ++, các loại được khai báo là một lớp, struct hoặc liên minh được coi là "loại lớp". Chúng được truyền theo giá trị hoặc bạn có thể nói một bản sao sử dụng trình xây dựng bản sao được truyền cho các chức năng. Điều này khá rõ ràng khi chúng tôi thực hiện các cây nhị phân trong đó bạn hầu như luôn có một loại param nút * trong hàm đệ quy tác dụng trên cây nhị phân. Điều này là để tạo điều kiện sửa đổi nút đó. Nếu nút được truyền như là (tức là không phải là loại con trỏ), các sửa đổi cho các nút sẽ được gửi đến bản sao cục bộ. Ngay cả trong trường hợp của các vectơ, trong khi chuyển một bản sao của các vectơ được truyền cho các hàm, để tránh chúng tôi sử dụng tham chiếu &.

Đã trả lời ngày 3 tháng 8 năm 2019 lúc 12:57Aug 3, 2019 at 12:57

Hướng dẫn c++ pass object by value - C++ truyền đối tượng theo giá trị

C ++ chuyển các đối số không phải là con trỏ (int*) hoặc tài liệu tham khảo (int &) theo giá trị. Bạn không thể sửa đổi VAR của khối gọi trong hàm được gọi. Mảng là gợi ý.

Đã trả lời ngày 19 tháng 1 năm 2014 lúc 10:17Jan 19, 2014 at 10:17

Scraatzscraatzscraatz

4092 Huy hiệu bạc7 Huy hiệu đồng2 silver badges7 bronze badges

10

Bạn có thể vượt qua một đối tượng theo giá trị?

Giá trị của đối tượng có thể thay đổi có thể được thay đổi khi nó được chuyển sang phương thức. Giá trị của một đối tượng bất biến không thể thay đổi, ngay cả khi nó được truyền một giá trị mới. Vượt qua giá trị của người Viking đề cập đến việc chuyển một bản sao của giá trị. Vượt qua bằng cách tham chiếu, đề cập đến việc truyền tham chiếu thực của biến trong bộ nhớ.“Passing by value” refers to passing a copy of the value. “Passing by reference” refers to passing the real reference of the variable in memory.

C có sử dụng vượt qua giá trị không?

C luôn sử dụng 'truyền giá trị' để chuyển các đối số sang các hàm (một thuật ngữ khác là 'cuộc gọi theo giá trị', có nghĩa là cùng một thứ), có nghĩa là mã trong một hàm không thể thay đổi các đối số được sử dụng để gọi hàm, ngay cả khiCác giá trị được thay đổi bên trong hàm. (another term is 'call by value', which means the same thing), which means the code within a function cannot alter the arguments used to call the function, even if the values are changed inside the function.

Bạn có thể chuyển một đối tượng theo giá trị trong C ++ không?

C ++ làm cho cả vượt qua giá trị và vượt qua các mô hình tham chiếu có thể.Bạn có thể tìm thấy hai cách sử dụng ví dụ dưới đây.Các mảng là các cấu trúc đặc biệt, khi bạn chuyển một mảng làm tham số, một con trỏ đến địa chỉ của phần tử đầu tiên được truyền dưới dạng giá trị với loại phần tử trong mảng.. You can find two example usages below. Arrays are special constructs, when you pass an array as parameter, a pointer to the address of the first element is passed as value with the type of element in the array.

Các đối tượng được truyền trong C như thế nào?

Các đối tượng là đối số hàm trong C ++ Các đối tượng của lớp có thể được truyền dưới dạng đối số cho các hàm thành viên cũng như các hàm không phải là tháng theo giá trị hoặc theo tham chiếu.Khi một đối tượng được truyền theo giá trị, một bản sao của đối tượng thực tế được tạo bên trong hàm.Bản sao này bị phá hủy khi hàm chấm dứt.