2010-01-08 30 views
5

thời gian gần đây tôi thấy đoạn code dưới đây (phiên bản đơn giản đưa ra dưới đây) trong cơ sở mã của tôi và có nghi ngờ này:Con trỏ có thể tham chiếu và con trỏ tới biến thực được coi là giống nhau không?

class B; 
class A 
{ 
    public: 
    A():m_A("testA"){} 
    B& getB() 
    { 
     return m_B; 
    } 
    B* getBPtr() //== > written to explain the problem clearly 
    { 
     return &m_B; 
    } 
private: 
    B m_B; 
}; 

class B 
{ 
    public: 
    B(const std::string& name):m_Name(name){} 
    std::string getName() const 
    { 
     return m_Name; 
    } 
private: 
    std::string m_Name; 
}; 

class C 
{ 
public: 
    void testFunc(B* ptr) 
    { 
    } 
}; 


int main() 
{ 
    A a; 
    C c; 
c.testFunc(&a.getB()); ===> is it equivalent to c.testFunc(a.getBPtr()) ? 
} 
  1. Con trỏ để tham khảo và con trỏ đến biến thực tế có thể được coi là giống nhau không?
  2. Tiêu chuẩn có nói bất cứ điều gì về địa chỉ tham chiếu có thể hoán đổi cho nhau được sử dụng cho địa chỉ biến hay không.

Trả lời

2

Có, không thể lấy địa chỉ của tham chiếu. Bạn luôn nhận được địa chỉ của đối tượng được giới thiệu.

2

Có nó tương đương. Lấy địa chỉ của tham chiếu trả về địa chỉ của tài liệu gốc. Vì không có cách nào để lấy bất kỳ địa chỉ nào khác ngoài tham chiếu, không có loại riêng biệt cho con trỏ tham chiếu.

9

câu đầu tiên của tiêu chuẩn 8.3.2/4:

Sẽ không có tham chiếu đến tài liệu tham khảo , không có mảng tài liệu tham khảo, và không gợi ý để tham khảo

(My nhấn mạnh)

Điều này không có nghĩa là bạn không thể lấy địa chỉ của biến được khai báo làm tham chiếu, điều đó có nghĩa là không có riêng biệt gõ cho một con trỏ đến một tham chiếu.

+0

Tôi rất vui vì bạn đã làm rõ điều đó. ;-) –

+0

Hmmm ... Tôi vẫn còn nhầm lẫn với dòng từ tiêu chuẩn. Tôi đã giải thích rằng dòng từ tiêu chuẩn là ---- chúng ta không nên cố gắng để có con trỏ để tham khảo. có nghĩa là, địa chỉ của tài liệu tham khảo không được sử dụng. –

+0

@aJ Không, nó chỉ có nghĩa là bạn không thể khai báo loại kiểu 'B & *'. –

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