Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: const_cast, kết quả lạ quá?

  1. #1
    Ngày gia nhập
    12 2015
    Nơi ở
    Đà Nẵng
    Bài viết
    513

    Mặc định const_cast, kết quả lạ quá?

    C++ Code:
    1. #include <iostream>
    2. using namespace std;
    3.  
    4. int main(int argc, char *argv[])
    5. {
    6.     const int i = 5;
    7.     const int *p = &i;
    8.     cout << &i << " " << i << "\n";
    9.     cout << p << " " << *p << "\n";
    10.     (*const_cast<int*>(p))+= 7;
    11.     cout << &i << " " << i << "\n";
    12.     cout << p << " " << *p << "\n";
    13. }
    14. /*
    15. Kết quả trên cxxdroid là
    16. 0x7fdb88c15c 5
    17. 0x7fdb88c15c 5
    18. 0x7fdb88c15c 5      //kết quả 2 dòng này
    19. 0x7fdb88c15c 12    //khác nhau, lạ không???
    20. Không biết trình biên dịch khác có như vậy không?
    21. [Program finished]
    22. */

    - - - Nội dung đã được cập nhật ngày 23-11-2020 lúc 07:22 PM - - -

    Đang cố gắng hiểu
    i không đổi vì khai báo const
    *p thay đổi vì const_cast
    Thế nhưng tại 1 địa chỉ chứa 2 giá trị thì quả là lạ, đúng không?

  2. #2
    Ngày gia nhập
    12 2015
    Nơi ở
    Đà Nẵng
    Bài viết
    513

    Các bạn không ai thấy lạ sao?
    Không biết trình biên dịch khác cho kết quả như thế nào nhỉ?

  3. #3
    Ngày gia nhập
    12 2015
    Nơi ở
    Đà Nẵng
    Bài viết
    513

    C++ Code:
    1. #include <iostream>
    2. using namespace std;
    3.  
    4. int main(int argc, char *argv[])
    5. {
    6.     const int x = 11;
    7.     int & ref1 = const_cast<int&>(x);
    8.     int & ref2 = const_cast<int&>(x);
    9.     int * ptr1 = const_cast<int*>(&x);
    10.     int * ptr2 = const_cast<int*>(&x);
    11.     ref1++;
    12.     ref2 += 2;
    13.     *ptr1 += 3;
    14.     *ptr2 += 4;
    15.     cout << &x << " " << x << "\n";
    16.     cout << &ref1 << " " << ref1 << "\n";
    17.     cout << &ref2 << " " << ref2 << "\n";
    18.     cout << ptr1 << " " << *ptr1 << "\n";
    19.     cout << ptr2 << " " << *ptr2 << "\n";
    20. }
    21. /* kết quả trên cxxdroid
    22. 0x7fef0a230c 11
    23. 0x7fef0a230c 21
    24. 0x7fef0a230c 21
    25. 0x7fef0a230c 21
    26. 0x7fef0a230c 21
    27.  
    28. [Program finished]
    29. *

Tags của đề tài này

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn