auto关键字

作用:
能自动推断出是什么数据类型
代码示例:

auto name()//能判断出返回值时字符串类
return std::string("hhh");

弊端:
对变量类型不明确,可能会破坏依赖特定类型的代码
比如字符串类的.strlen()
什么时候用:
当类型过长时

int main()
{
  std::vector<std::string> strings;
strings.push_back("Apple");
strings.push_back("range");

for(std::vector<std::strinh>::terator it=strings.begin();it!=string.end();it++)
//替换成for(auto it=strings.begin();it!=string.end();it++)
}

函数指针:

是什么:
函数复制给变量
代码示例:
void Hello()
{
std::cout<< "hello" << std::endl;
}
int main()
{
void (*function)();
auto tuction=Hello;
fuction();
}

lambda

是什么:
定义一种匿名函数的方法,这种方式创建的函数不需要实际创建一个函数,像是个一次性的函数展示下需要运行的代码;
用法:
设置函数指针指向函数的任何地方都可以将其设置成lambda;
代码示例:

void ForEach(const std::vector<int>& values,void (*func)(int))
{
for(int value:values)
func(value);
}
遍历数组调用
int main()
{
std::vector<int> values{1,5,4,2,3};
}

ForEach(value3[](int value)
{
std::cout<<"value"<<value<<std::endl;
}
例2:
将一个函数传递给一个api以使在未来某个时间,可以为我们调用这个函数,告诉它当我们到了像调用一个函数时,我们哟调用哪个函数
auto lambda=[](int value)
{
std::cout<< "saf"<< std::endl;
}
[a,&b]:a作为拷贝或值被捕获,b可以作为引用被捕获
[&]:捕获所有变量通过引用的途径
[=]:捕获所有 通过值或拷贝
[]什么都不捕获
例子:

std::vector<int>values={1,5,4,2,3};
int a=5;
auto ;ambda=[=](int values){std::cout<<a<<std::endl;}
ForEach(values,lambda);

posted @ 2024-07-14 16:30  Wzline  阅读(1)  评论(0编辑  收藏  举报