C++ 在什么情况下应该使用自动类型?
关于何时使用C++ 在什么情况下应该使用自动类型?,c++,lambda,auto,c++14,std-function,C++,Lambda,Auto,C++14,Std Function,关于何时使用auto 明确地说,这是不是更清楚,尽管上下文 最好是显式的,而不是自动的 对于lambda函数,使用auto如何 auto f = [](auto v, auto x) {}; //or std::function<void(auto v, auto x)> f; autof=[](autov,autox){}; //或 std::函数f; 感谢……就我个人而言,我倾向于使用auto来选择几种类型的代码: 无法表达的类型,如lambdas创建的类型: auto f
auto
auto
如何
auto f = [](auto v, auto x) {};
//or
std::function<void(auto v, auto x)> f;
autof=[](autov,autox){};
//或
std::函数f;
感谢……就我个人而言,我倾向于使用
auto
来选择几种类型的代码:
auto f = []() { /* some code */ };
auto it = m.find(key);
if(it != m.end() {
/* some code */
}
float f = 123.456;
/* some code */
auto n = static_cast<int>(f);
float f=123.456;
/*一些代码*/
自动n=静态(f);
或类似地:
if(auto p = dynamic_cast<Derived *>(base_ptr)) {
/* some code here */
}
if(自动p=动态施法(基本施法)){
/*这里有一些代码*/
}
std::function
vsauto
,我会在可能的时候使用auto
,然后根据需要使用std::function
。这是因为std::function
有一点开销,因为它是使用类型擦除技术实现的
这通常意味着我将使用模板来实现在合理的情况下接受“可调用的东西”的函数
也就是说,如果我需要存储一个函数,可能需要传递它,那么
std::function
非常适合。您提供的两行代码做两件截然不同的事情。lambda是一种情况,实际上必须使用auto,因为它们的类型只有编译器知道。我可能会对你感兴趣。@MikeMB我不知道。这两行都不编译,所以它们做的是相同的事情。一行更接近编译?(仅缺少2个字符)。另一个包含了对C++14的auto
的基本误解。@Yakk:你是对的,尤其是函数版本没有任何意义。但是lambdas和std::function在表示什么以及如何存储方面有着根本的不同。每个lambda都是一个具有自己类型的函数对象,并在堆上创建std::function
是包装器,可以包装不同的函数或函数对象,只要它们具有正确的接口。很可能我也误解了这个问题,因为我关注的是何时对变量使用auto,而不是lambdas的参数类型推断。@mike lambdas不使用免费存储/堆存储。。。不是没有帮助。@yack:对不起,太晚了,我当然是说“堆叠”