- trình biên dịch gì có thể làm tạo const theo nghĩa đen, nhưng đó không phải là một biến.
Tham chiếu không phải const không thể trỏ đến chữ.
$ g ++ test.cpp test.cpp: Trong chức năng int main()': test.cpp:10: error: invalid initialization of non-const reference of type 'double&' from a temporary of type 'double' test.cpp:5: error: in passing argument 1 of
foo đôi (double &)'
test.cpp:
#include <iostream>
using namespace std;
double foo(double & x) {
x = 1;
}
int main() {
foo(5.0);
cout << "hello, world" << endl;
return 0;
}
Mặt khác, bạn có thể vượt qua một tham chiếu chữ đến tham chiếu const như sau. test2.cpp:
#include <iostream>
using namespace std;
double foo(const double & x) {
cout << x << endl;
}
int main() {
foo(5.0);
cout << "hello, world" << endl;
return 0;
}
Nguồn
2009-03-19 07:06:40
Điều này có vẻ rất không hiệu quả đối với tôi. Nó sẽ không được tốt hơn để chỉ cần tạo một vị trí bộ nhớ trong phân khúc chỉ đọc với giá trị khai báo và sử dụng nó thay vì tạo một biến trên ngăn xếp? Tất cả đằng sau hậu trường, tất nhiên ... –
Đó là thực hiện phụ thuộc anyway. Và gấp đôi không phải là lớn. – sharptooth
Tạo biến tạm thời cũng tốt cho các đối tượng. Thay vì gấp đôi nếu nó là một Class thì một đối tượng tạm thời sẽ được tạo và constructor của nó cũng sẽ được gọi. –