6

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

4

6 回答 6

25

auto 在当前的 C/C++ 中从来没有用过,因为所有变量都是隐式自动的。它在 C++0x 中很有用,它可以完全替换类型声明 - 如果您有一个带有初始赋值的变量,'auto' 只会使其成为该赋值值的类型,如注释中所示。

于 2008-10-31T05:31:47.640 回答
4

我没有看到auto在过去 10 多年编写的代码中使用过。没有理由使用它,auto因为您唯一可以使用它的地方就是它暗示的地方。它仍然存在的唯一原因是为了向后兼容,但在新代码中应该避免它。

于 2008-10-31T05:35:34.840 回答
3

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

于 2008-10-31T10:27:10.057 回答
1

不,假设您省略了类说明符。我能想到的唯一合理的用途是提醒人们注意一个特定的局部变量,它会覆盖一个同名的全局变量,或者作为一个面试问题。

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

于 2008-10-31T05:32:20.870 回答
1

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

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

于 2008-10-31T08:30:56.983 回答
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;
    }
}
于 2012-09-24T21:51:01.080 回答