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 decltype

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

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

    decltype là gì?

    Trong C++11, từ khóa decltype dùng để yêu cầu lấy kiểu dữ liệu của 1 biến hoặc 1 biểu thức/giá trị. Xét các ví dụ sau

    // STDIO_i có kiểu là int vì 14 có kiểu là int
    decltype(14) STDIO_i;
    
    // STDIO_d có kiểu là double vì 14+3.0 có kết quả là 17.0 có kiểu là double
    decltype(14 + 3.0) STDIO_d;
     
    // STDIO_li_i có kiểu là list<int>::iterator do li.begin() có kiểu là list<int>::iterator
    list<int> li;
    decltype(li.begin()) STDIO_li_i;

    decltype và auto

    Từ khóa auto hỗ trợ việc không cần xác định kiểu, vì kiểu sẽ được xác định thông qua giá trị hay biến được gán. Còn decltype có thể xem là 1 phương pháp thay thế cho auto khá hiệu quả.

    auto m = 100;
    decltype(100) n = 100;

    Cả 2 trường hợp trên, biến mn đều sẽ có kiểu là int.

    Hàm trả có kết quả trả về là auto

    Phải chỉ định kiểu trả về của hàm dạng sau

    auto getInscreaseAge(int age) -> decltype(age)
    {
    	return age++;
    }

    Như cách viết hàm trên, auto sẽ không thể xác định được kiểu dữ liệu trả về, với cú pháp mới trong C++11 với giá trị trả về kiểu auto, phải "chỉ định" kiểu trả về là gì bằng cách thêm -> return_type như trường hợp trên, có kiểu trả về sẽ là int (do age kiểu int).

    Cách viết hàm trên chưa thể hiện được lợi ích của việc dùng autodecltype trong trường hợp này vì thật ra có thể viết đơn giản như sau

    int getInscreaseAge(int age)
    {
    	return age++;
    }
    
    // hoặc
    
    auto getInscreaseAge(int age) -> int
    {
    	return age++;
    }

    Sử dụng nó kèm với template.

    template <typename T1, typename T2>
    auto getAdd(T1 arg1, T2 arg2) -> decltype(arg1 + arg2)
    {
    	return (arg1 + arg2);
    }

    Lựa chọn sử dụng decltype cho kiểu sẽ được trả về, vậy kết quả cuối cùng sẽ quy định kiểu được trả về là kiểu gì, tất cả sẽ do kiểu truyền vào quyết định kiểu trả về chứ không phải bắt buộc phải biết trước kiểu trả về là gì (được quyền lựa chọn linh động hơn kiểu trả về).

    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