What is decltype and how is it used?

前端 未结 1 1007
礼貌的吻别
礼貌的吻别 2021-01-30 05:09

I haven\'t been able to find a good explanation of decltype. Please tell me, as a beginning programmer, what it does and why it is useful.

For example, I am reading a bo

相关标签:
1条回答
  • 2021-01-30 05:38

    decltype is a way to specify a type: You give it an expression, and decltype gives you back a type which corresponds to the type of the expression. Specifically, decltype(e) is the following type:

    • If e is the name of a variable, i.e. an "id-expression", then the resulting type is the type of the variable.

    • Otherwise, if e evaluates to an lvalue of type T, then the resulting type is T &, and if e evaluates to an rvalue of type T, then the resulting type is T.

    Combining these rules with reference collapsing rules allows you to make sense of decltype(e) &&, which is always a "suitable" reference. (C++14 also adds decltype(auto) to give you the type-deduction of auto combined with the value category semantics of decltype.)

    Examples:

    int foo();
    int n = 10;
    
    decltype(n) a = 20;             // a is an "int" [id-expression]
    
    decltype((n)) b = a;            // b is an "int &" [(n) is an lvalue]
    
    decltype(foo()) c = foo();      // c is an "int" [rvalue]
    
    decltype(foo()) && r1 = foo();  // int &&
    decltype((n)) && r2 = n;        // int & [& && collapses to &]
    

    It might be worth stressing the difference between auto and decltype: auto works on types, and decltype works on expressions.

    You shouldn't be seeing or using decltype in "day-to-day" programming. It is most useful in generic (templated) library code, where the expression in question is not known and depends on a paramater. (By contrast, auto may be used generously all over the place.) In short, if you're new to programming, you probably won't need to use decltype for some time.

    0 讨论(0)
提交回复
热议问题