C++的auto用法学习

学习内容参考:【http://www.cnblogs.com/QG-whz/p/4951177.html】

auto

可以在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型,类似的关键字还有decltype。

auto关键字必须在定义的时候赋予初始化值(类似于const)

auto关键字的正确用法。

1.用于代替冗长复杂、变量使用范围专一的变量声明。

在没有auto的时候,我们操作标准库时经常需要这样:

#include
#include
int main()
{
    std::vector vs;
    for (std::vector::iterator i = vs.begin(); i != vs.end(); i++)
    {
        //...
    }
}

使用auto可以简化代码:

#include
#include
int main()
{
    std::vector vs;
    for (auto i = vs.begin(); i != vs.end(); i++)
    {
        //..
    }
}

2.在定义模板函数时,用于声明依赖模板参数的变量类型。 

template 
void Multiply(_Tx x, _Ty y)
{
    auto v = x*y;
    std::cout << v;
}

3.模板函数依赖于模板参数的返回值

template 
auto multiply(_Tx x, _Ty y)->decltype(_Tx*_Ty)
{
    return x*y;
}

当模板函数的返回值依赖于模板的参数时,无法在编译代码前确定模板参数的类型,故也无从知道返回值的类型,这时我们可以使用auto。格式如上所示。
decltype操作符用于查询表达式的数据类型,也是C++11标准引入的新的运算符,其目的也是解决泛型编程中有些类型由模板参数决定,而难以表示它的问题。
auto在这里的作用也称为返回值占位,它只是为函数返回值占了一个位置,真正的返回值是后面的decltype(_Tx*_Ty)。

但如果不采用后置,则函数声明时为:

decltype(_Tx*_Ty)multiply(_Tx x, _Ty y)

此时由于_Tx,_Ty还没声明,编译无法通过。

 

 

你可能感兴趣的:(Note)