有没有人见过在C / C ++中明确使用的存储类auto
?如果是这样,在什么情况下?
答案 0 :(得分:25)
auto在当前的C / C ++中永远不会有用,因为所有变量都是隐式自动的。它在C ++ 0x中非常有用,它可以完全替换类型声明 - 如果你有一个带有初始赋值的变量,'auto'只会使它成为该赋值的类型,就像在注释中一样。
答案 1 :(得分:4)
我在过去10多年的编写代码中没有看到auto
。没有理由使用auto
,因为您可以使用它的唯一地方无论如何都是隐含的。它仍然存在的唯一原因是为了向后兼容,但在新代码中应该避免使用它。
答案 2 :(得分:3)
在GCC中,您可能需要auto来声明嵌套函数,以便能够在函数体中的任何位置定义它 - 请参阅http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Nested-Functions.html
答案 3 :(得分:1)
不,假设您省略了类说明符。我能想到的唯一合理用途是将注意力调用到一个特定的局部变量,该变量会覆盖一个具有相同名称的全局变量或面试问题。
很可能,你会让那些坚持维护代码的程序员感到困惑!
答案 4 :(得分:1)
正如Alex所述,在C ++ 0x中使用auto来声明初始化声明中的类型,其中类型是从初始化代码推断出来的。
有人建议将它也用作返回类型,其中类型是从返回值的代码中推导出来的。然而,这引起了歧义,所以在编写本文时,正在考虑与C ++ 0x的lambda语法更加一致的内容。
答案 5 :(得分:1)
以下是我的代码中的一个例子,用C ++ 11编写:
c_srgb find_in_book(const c_HVC &HVC) {
auto b = munsell.mun_to_rgb_book.find(HVC);
if( b != munsell.mun_to_rgb_book.end()) {
c_srgb f = b->second;
return f;
} else {
c_srgb ret;
ret.r=ret.g=ret.b=0;
return ret;
}
}
我更喜欢这个:
c_srgb find_in_book(const c_HVC &HVC) {
std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<dj::color::c_HVC,dj::color::c_srgb,std::less<dj::color::c_HVC>,std::allocator<std::pair<const dj::color::c_HVC,dj::color::c_srgb>>,false>>> b = munsell.mun_to_rgb_book.find(HVC);
if( b != munsell.mun_to_rgb_book.end()) {
c_srgb f = b->second;
return f;
} else {
c_srgb ret;
ret.r=ret.g=ret.b=0;
return ret;
}
}