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

有帮助吗?

解决方案

auto在当前的C / C ++中永远不会有用,因为所有变量都是隐式自动的。它在C ++ 0x中非常有用,它可以完全替换类型声明 - 如果你有一个带有初始赋值的变量,'auto'只会使它成为该赋值的类型,就像在注释中一样。

其他提示

我还没有看到过去10多年来编写的代码中使用的 auto 。没有理由使用 auto ,因为可以使用它的唯一地方无论如何都是隐含的。它仍然存在的唯一原因是为了向后兼容,但在新代码中应该避免使用它。

在GCC中,你可能需要auto来声明嵌套函数,以便能够在函数体的任何地方定义它 - 参见 http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Nested-Functions.html

不,假设您省略了类说明符。我能想到的唯一合理用途是将注意力调用到一个特定的局部变量,该变量会覆盖一个具有相同名称的全局变量或面试问题。

很可能,你会让那些坚持维护代码的程序员感到困惑!

正如Alex所述,在C ++ 0x中使用auto来声明初始化声明中的类型,其中类型是从初始化代码推断出来的。

有人建议将它也用作返回类型,其中类型是从返回值的代码中推导出来的。然而,这引起了歧义,所以在编写本文时,正在考虑与C ++ 0x的lambda语法更加一致的内容。

以下是我的代码中的一个例子,用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;
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top