c++ - 函数返回类型说明符 c++type 中的变量声明

标签 c++ gcc gcc-extensions

我在尝试使用 codefights.com 并注意到有人回答了一个问题,该问题涉及在 vector 中给出所有最长的字符串,这样做:

std::vector<std::string> r, allLongestStrings(std::vector<std::string> a) {
    int b=0;
    for (s:a) if (s.size()>b) b=s.size();
    for (s:a) if (s.size()==b) r.push_back(s);
    return r;
}

他在函数的返回类型说明符中声明了一个变量,谁能告诉我为什么允许这样做?我没有在我的机器上编译,我找不到执行此操作的 gcc 扩展,在此先感谢 :)。

最佳答案

查看 reference (decl-specifier-seq),我不明白如何在函数名之前声明返回变量。

在 C++14 中,您可以使用 auto 关键字来删除重复提及的返回类型:

auto allLongestStrings( const std::vector<std::string>& a ) {
    std::vector<std::string> r;
    std::size_t b = 0;
    for( const auto& s : a ) if( s.size() > b ) b = s.size();
    for( const auto& s : a ) if( s.size() == b ) r.push_back( s );
    return r;
}

我修复了代码的其他一些问题:

  • 为了提高效率,将参数a声明为常量引用,这样就不会被复制
  • b 声明为 std::size_t 以匹配 std::vector::size() 的返回类型
  • 在 range-for 循环中,类型说明符是必需的(即使它是 auto);添加 const 引用以提高效率

Live demo.

关于c++ - 函数返回类型说明符 c++type 中的变量声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43446657/

相关文章:

c++ - VBO 照明和索引

c++ - 如何读/写 ASCII .pgm 文件

c - 如何在 C 中实现 Go 的 defer() 以便允许声明变量?

c - C代码中switch-case中的 "..."是什么

c - GCC-修改函数返回后继续执行的地方

c++ - 获取地址信息 : in what way is AI_PASSIVE ignored if the nodename is specified?

c# - 如何在 ISO C++ 中定义或实现 C# 属性?

c - GCC 中静态变量的符号是如何命名的?

c - 汇编语言中的 getchar()

c++ - OSX clang++:用于cpp文件中显式实例化的模板的架构x86_64的 undefined symbol