STDIO
Tìm kiếm gần đây
    Nội dung
    0
    0
    Chia sẻ
    Nội dung
    0
    0
    Chia sẻ

    C++11 - Từ Khóa auto

    Tìm hiểu về từ khoá auto trong C++.
    03/06/2014 15/09/2020 3 phút đọc
    C++11 - Từ Khóa auto

    Danh sách bài viết về C++11

    Từ khóa auto ở C++03

    Với từ khóa auto, 1 biến sẽ chỉ định cho trình biên dịch biết rằng, nó có thời gian "sống" trong 1 phạm vi cục bộ. Các biến auto sẽ không được khởi tạo tự động, chính vì vậy, dòng code sau sẽ sinh ra lỗi

    auto int STDIO_uninitialized_local_variable;
    int STDIO_implicit_auto = STDIO_uninitialized_local_variable;

    Dòng code thứ 2 sẽ lỗi vì biến ta đang sử dụng 1 biến chưa được khởi tạo STDIO_uninitialized_local_variable. Theo logic thì không thể gán 1 biến chưa có giá trị gì cho 1 biến khác. Có thể sửa lại thành code như sau, trình biên dịch sẽ chấp nhận

    auto int STDIO_uninitialized_local_variable = 0;
    int STDIO_implicit_auto = STDIO_uninitialized_local_variable;

    Phạm vi của auto

    Biến auto sẽ được khởi tạo và tồn tại trong 1 phạm vi cục bộ cho đến khi thoát khỏi phạm vi cục bộ sẽ được thu hồi

    {
    	// Tạo khi vào phạm vi này và bị thu hồi sau khi thoát khỏi phạm vi này 
    	auto int STDIO_uninitialized_local_variable = 0;
    }

    Tinh giản từ khóa auto

    Chính vì từ khóa auto chỉ sử dụng cho biến cục bộ (local), nên trình biên dịch cho phép tinh giản từ khóa này và chỉ cần khai báo như bên dưới, cách khai báo 2 biến STDIO_aSTDIO_b là tương đương

    auto char STDIO_a = 'x';
    char STDIO_b = 'y';

    Từ khóa auto ở C++11

    Với từ khóa auto ở phiên bản C++11 nó có ý nghĩa khác hoàn toàn với C++03, nó có nghĩa là, tự động nhận dạng kiểu dữ liệu thông qua kiểu dữ liệu của giá trị khởi tạo ra nó

    // STDIO_c kiểu char do 'c' kiểu char
    auto STDIO_c = 'c';
    
    // STDIO_i kiểu int do 10 kiểu int
    auto STDIO_i = 10;
    
    // STDIO_p kiểu int* do new int[3] trả về kiểu int*
    auto STDIO_p = new int[3];
    
    // STDIO_li_i kiểu list<int>::iterator do li.begin() trả về kiểu list<int>::iterator
    list<int> li;
    auto STDIO_li_i = li.begin();

    Lưu ý rằng, với auto thì biến phải được khởi tạo ngay để trình biên dịch nhận dạng, và khi đã nhận dạng kiểu dữ liệu thì không được thay đổi kiểu dữ liệu nữa.

    Lợi ích và điều bất lợi

    Lợi ích của auto trong C++11 là khá lớn trong việc tăng tốc phát triển ứng dụng. Đôi lúc các kiểu dữ liệu rất to lớn và dài, việc sử dụng "tự động chọn kiểu" như auto sẽ giúp cho code ngắn gọn vì "dù gì cũng phải gõ lại đúng kiểu", bớt các công việc tay chân, như ví dụ trên thấy list<int>::iterator là kiểu dữ liệu gõ khá dài. Ví dụ: Concurrency::task<Platform::Array<byte>^> (trích trong 1 project mẫu của Direct3D Windows Phone 8 với XAML).

    Nhược điểm của loại biến này là sự không tường minh trong mã nguồn, gây ra việc khó tra cứu nguồn gốc (kiểu dữ liệu) của 1 biến.

    0 Bình luận
    Modern C++

    Modern C++

    STDIO Training - Đào Tạo Lập Trình C++.

    Khi bạn nhấn vào sản phẩm do chúng tôi đề xuất và mua hàng, chúng tôi sẽ nhận được hoa hồng. Điều này hỗ trợ chúng tôi có thêm kinh phí tạo nhiều nội dung hữu ích. Tìm hiểu thêm.
    STDIO

    Trang chính

    Công ty TNHH STDIO

    • 30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
      +84 28.36205514 - +84 942.111912
      developer@stdio.vn
    • 383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
      Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012
    ©STDIO, 2013 - 2021