Từ 1 tới 10 trên tổng số 14 kết quả
-
#1
- Ngày gia nhập
- 09 2010
- Bài viết
- 88
Tóm Tắt
const: ý nghĩa của const trong khai báo function
mình khai báo như sau:
Code:
#1 #2 #3 #4 #5 //const int const *foo(const int const &i) const { const int const *foo(const int const *i) const { //EDIT //blah blah }
Đã được chỉnh sửa lần cuối bởi quano1 : 05-08-2013 lúc
05:17 PM
.
-
#2
- Ngày gia nhập
- 07 2007
- Nơi ở
- TP HCM
- Bài viết
- 66
#5 chỉ ra rằng hàm foo sẽ không thay đổi member nào thuộc về class có hàm foo trừ phi member đó được đánh dấu mutable.
#3 #4: (const int const &i) i là một tham chiếu hằng đến một hằng kiểu int. Tức là tham chiếu hằng này sẽ không bị thay đổi và biến kiểu int đang được tham chiếu tới cũng không thể bị thay đổi.
#1 #2: const int const * là trả về một con trỏ hằng trỏ đến một hằng kiểu int. Tức là con trỏ hằng này sẽ không trỏ được tới biến khác và biến đang được trỏ tới cũng không thể bị thay đổi.
( #1 #2 ) và (#3 #4) tương đương nhau chỉ khác một bên là con trỏ một bên là tham chiếu. Về cách sử dụng thì con trỏ và tham chiếu cũng tương đương nhau. Con trỏ dùng dấu -> để gọi member, tham chiếu dùng . để gọi member.
Note: tham chiếu == reference
Hướng dẫn lập trình C++ cho người mới học
-
#3
- Ngày gia nhập
- 09 2010
- Bài viết
- 88
rất cảm ơn bạn. cho mình hỏi tiếp
const int * Constant2
declares that Constant2 is a variable pointer to a constant integer andint const * Constant2
is an alternative syntax which does the same, whereasint * const Constant3
declares that Constant3 is constant pointer to a variable integer andnếu đúng cho mình hỏi tiếp: tại sao lại phân ra quá nhiều kiểu khai báo trong khi không có gì khác nhau như vậy (ít nhất là #1 <=> #2 và #3 <=> #4)?
p/s: mình nhầm, argument là 1 con trỏ chứ không phải tham chiếu
Đã được chỉnh sửa lần cuối bởi quano1 : 05-08-2013 lúc
05:16 PM
.
-
#4
- Ngày gia nhập
- 07 2007
- Nơi ở
- TP HCM
- Bài viết
- 66
Bạn thấy #3 và #4 khác nhau chỗ nào? Thực ra const nó đựa dùng để chỉ ra phần tử phía bên trái của nó là hằng. Tuy nhiên nếu phía bên trái nó không có gì hết thì nó sẽ được hiểu là phía bên phải const là hằng.
const int * Constant2; // phía bên trái const ko có gì, => int là hằng
int const * Constant2; // phía bên trái const là int => int là hằng
int * const Constant3; // phía bên trái const là * => pointer là hằngC++ Code:
Select All | Show/Hide
-
#1 #2 #3 #4 #5
-
const
int
const
*
foo
(
const
int
const
&
i
)
const
{
-
}
-
// Trường hợp 1
-
int
const
&
i
;
// phía bên trái const là int => int là hằng
-
// Trường hợp 2
-
//#1 #2
-
const
int
const
&
i
;
// tính từ phải qua trái , const #2 chỉ ra int là hằng, vậy const #1?
-
// dư const => tính lại
-
// const #1 => int là hằng, const #2 => & là hằng.
Hướng dẫn lập trình C++ cho người mới học
-
#5
- Ngày gia nhập
- 07 2011
- Bài viết
- 474
const int const *foo(const int const &i) const
cách khai báo này là sai rồi \. Làm gì có const int const ??
-
#6
- Ngày gia nhập
- 04 2010
- Nơi ở
- Binh Thanh, Hồ Chí Minh, Vietnam, Vietnam
- Bài viết
- 504
const: ý nghĩa của const trong khai báo function
Xem bài viết chi tiết tại đây, có cả vấn đề các bạn đang thắc mắc.
__http://diendan.congdongcviet.com/showthread.php?t=41764Kết bạn với tôi <3
Skype: giautm
Facebook: https://fb.com/giautm.duongntt
Email: [email protected] -
#7
- Ngày gia nhập
- 07 2007
- Nơi ở
- TP HCM
- Bài viết
- 66
@INTP: Đồng ý với bạn const int const aVariable; là ko đúng. Nhưng nó vẫn hợp lệ khi dùng với con trỏ và reference
C++ Code:
Select All | Show/Hide
-
const
int
const
&
aReference
;
-
// hoặc
-
const
int
const
*
aPointer
;
Tuy nhiên, cách viết sau có thể là ổn hơn
C++ Code:
Select All | Show/Hide
-
int
const
*
const
aPointerToConst
;
Hướng dẫn lập trình C++ cho người mới học
-
#8
- Ngày gia nhập
- 09 2010
- Bài viết
- 88
cảm ơn bạn đây đúng là bài mà mình tìm kiếm trong diễn đàn của mình
cách đây 2 năm mình đã đọc được 1 lần nhưng h cần tìm lại search hoài không ra đành phải tạo topicedit:
const type và type const là như nhau
dù là khai báo hàm hay khai báo biếnvà từ khóa const tính với khai báo bên trái gần nhất của nó, khi bên trái không có gì sẽ là bên phải (đau đầu)
nghĩa là:
int const *cpi <=> const int *cpi : con trỏ chỉ có thể trỏ tới 1 vùng nhớ kiểu const int
int * const pci : con trỏ chỉ trỏ được 1 lần đầu tiên khi khai báomấy kiến thức kiểu này không thể nhớ được = việc đọc sách 🙁
Đã được chỉnh sửa lần cuối bởi quano1 : 05-08-2013 lúc
11:09 PM
.
-
#9
- Ngày gia nhập
- 07 2011
- Bài viết
- 474
Microsoft’s compiler toàn rape standard thì nhắc tới nó làm gì ở đây @.@ //nó chỉ được nhiều người thích vì bộ debug của nó trên cả tuyệt vời.
1. int* ptr;
*ptr = 1; //ok
++ptr; //ok2. const int* ptr; //hay int const* ptr;
*ptr = 1; //không được, vì ptr là con trỏ trỏ tới hằng số, nên *ptr là hằng số, ko thể thay đổi được.
++ptr; //ok3. int* const ptr;
*ptr = 1; //ok
++ptr; //không được, vì giá trị địa chỉ mà ptr chứa không thể thay đổi.4. const int* const ptr;
*ptr = 1; //không được, vì ptr là con trỏ trỏ tới hằng số, nên *ptr là hằng số, ko thể thay đổi được.
++ptr; //không được, vì giá trị địa chỉ mà ptr chứa không thể thay đổi.nếu const int const* ptr; mà có nghĩa, thì int const* ptr; dịch là (2) hay (3) ??
cách đọc trong C++ thì hình như là từ phải sang trái:
int const * ptr;
từ trái sang phải ta thấy có; ptr, *, const, int
đọc là: ptr(ptr) là con trỏ(*) trỏ tới hằng(const) số nguyên(int).
Thì hiểu là: ptr là con trỏ trỏ tới hằng số (nguyên) (pointer to constant, hay con trỏ ko thể thay đổi giá trị chứa trong địa chỉ mà nó trỏ tới được)int * const ptr;
từ trái sang phải ta thấy có; ptr, const, *, int
đọc là: ptr(ptr) là hằng (const) con trỏ(*) trỏ tới số nguyên(int).
Thì hiểu là: ptr là hằng con trỏ (constant pointer, pointer ko thể thay đổi địa chỉ mà nó đang chứa được), trỏ tới số nguyên.//edit chục lần rồi ~.~
Đã được chỉnh sửa lần cuối bởi INTP : 05-08-2013 lúc
10:31 PM
.
-
#10
- Ngày gia nhập
- 09 2010
- Bài viết
- 88
mình code trên linux
mình thích c++ từ lâu rồi, nhưng vì nó quá khó và đòi hỏi luôn phải có kinh nghiệm nên đành phải làm web php để tạm sống đã
bây giờ tạm ổn rồi thì lại đi tìm việc c++ để tiếp tục ước mơ
ai có kinh nghiệm làm c++ cho mình hỏi, thông thường trong các dự án c++ người ta hay đòi hỏi phải như thế nào?
kinh nghiệm ở đây là kinh nghiệm code để tránh bug nhiều nhất có thể, compile trên nhiều OS, dùng được nhiều opensource lib…?
rất cảm ơn mọi người đã chia sẻ