2012-11-23 43 views
9

Biến cố định trong C++ mặc định thành liên kết nội bộ. Giả Nếu tôi có như sau:Biến cố định trong C++

  • tôi định nghĩa một biến const trong một tập tin header (const int var = 2)

  • Sau đó, tôi bao gồm các tiêu đề trong hai tập tin cpp.

Nếu tôi thử lấy địa chỉ của biến const đó (tức là &var) trong cả hai tệp cpp, thì hai địa chỉ đó có giống nhau không? Ngoài ra tôi cần một mã số làm việc nhỏ để xác minh thực tế này.

Tôi phải đăng câu hỏi này vì tôi không thể hỏi nó trong các ý kiến ​​cho this answer được đưa ra trong chuỗi này vì tôi là người mới.

+2

Tôi cho rằng bạn quan tâm đến C++. C là khá khác nhau với các quy tắc của nó cho điều đó. Vì vậy, tôi khuyên bạn nên xóa thẻ C. –

+4

Chắc chắn điều này sẽ chỉ mất một phút để kiểm tra? – Rook

+0

@Rook: Không. "" A "==" a "" trên hệ thống của tôi ở đây, nhưng đó là thực tế không được bảo đảm. – MSalters

Trả lời

5

Đối với C++ nó sẽ không giống nhau do liên kết nội bộ - đây là 2 đối tượng riêng biệt. Trong C đó là cách khác xung quanh và const sẽ có liên kết bên ngoài, do đó bạn sẽ nhận được một lỗi liên kết do định nghĩa lại.

+0

Đó là những gì tôi nghĩ. Nhưng câu trả lời trong liên kết mà tôi đã đề cập nói rằng nó sẽ giống nhau. –

+0

Đó không phải là những gì được nói ở đó. Đọc kỹ - địa chỉ "giống nhau" trong câu trả lời đó là vì nó là cùng một biến toàn cầu. Bạn nên làm một số đọc về ý nghĩa của từ khóa 'extern' và các biến toàn cục. – SomeWittyUsername

+0

@UchiaItachi Bạn hiểu sai câu trả lời đó. Nó nói rằng nếu bạn * khai báo chúng như là extern trong tiêu đề * và * định nghĩa chúng trong một tệp '.cc' *, thì bạn sẽ nhận được cùng một địa chỉ. –

0

Biến sẽ có địa chỉ khác nhau. Nó cũng có khả năng là nếu bạn không tham chiếu đến địa chỉ biến bất cứ nơi nào variabile sẽ được thay thế bằng giá trị của nó trong quá trình biên dịch và trong nhị phân, bạn sẽ không tìm thấy giá trị biến nào cả.

+0

nếu nó không được tham chiếu, biến và giá trị của nó có thể được bỏ qua ở tất cả từ nhị phân, không được thay thế – SomeWittyUsername

2

thì hai địa chỉ đó có giống nhau không?

Không. Vì tiêu đề được đưa vào tệp * .cpp trong khi biên dịch nên mỗi * .cpp bao gồm tiêu đề của bạn sẽ tạo ra hằng số riêng.

Tuy nhiên, nếu bạn sử dụng extern const int var; trong tiêu đề và đặt giá trị mặc định trong * .cpp, chúng phải giống nhau.

Các vấn đề liên quan