似乎auto是一个相当重要的function,在C ++ 11中join,似乎遵循了很多新的语言。 就像Python这样的语言,我还没有看到任何显式的variables声明(我不确定是否有可能使用Python标准)。 使用auto声明variables而不是显式声明variables是否有缺点?
我有一个感觉,lambda的types是一个函数指针。 当我进行下面的testing时,我发现它是错误的( 演示 )。 #define LAMBDA [] (int i) -> long { return 0; } int main () { long (*pFptr)(int) = LAMBDA; // ok auto pAuto = LAMBDA; // ok assert(typeid(pFptr) == typeid(pAuto)); // assertion fails ! } 上面的代码是否缺less任何一点? 如果不是那么,用auto关键字推导出lambdaexpression式的types是什么?
gcc 4.9允许下面的代码,但是gcc 4.8和clang 3.5.0拒绝它。 void foo(auto c) { std::cout << c.c_str(); } 我得到warning: ISO C++ forbids use of 'auto' in parameter declaration [-Wpedantic]在4.9中,但在4.8和clang我得到error: parameter declared 'auto' 。
我一直在C ++ 11标准中使用新的auto关键字,用于复杂的模板types,这是我相信它的目的。 但我也使用它的东西,如: auto foo = std::make_shared<Foo>(); 更怀疑的是: auto foo = bla(); // where bla() return a shared_ptr<Foo> 我没有看到有关这个话题的很多讨论。 看起来auto可能被过度使用,因为types通常是一种文件和健全性检查。 你在哪里画线使用auto和什么是这个新function的推荐用例? 澄清:我不是要求哲学观点, 我要求标准委员会对这个关键词进行预期的使用,可能会对实际中如何实现这个预期的使用做出评论。 附注:这个问题被转移到SE.Programmers,然后回到堆栈溢出。 关于这个的讨论可以在这个元问题中find。