自动在C / C ++中有用吗?

时间:2008-10-31 05:27:22

标签: c++ c syntax keyword

有没有人见过在C / C ++中明确使用的存储类auto?如果是这样,在什么情况下?

6 个答案:

答案 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;
    }
}