警告:函数使用'auto'类型说明符而不使用尾随返回类型

时间:2017-06-28 09:31:56

标签: c++ c++11 c++14 constexpr return-type

以下代码给出了以下警告。有人可以解释一下原因(注意代码没有用,因为我用int替换了我的类型来做一个完整的例子。)

警告:'MaxEventSize()'函数使用'auto'类型说明符而没有尾随返回类型[默认启用]

我们的想法是获得特定结构的最大大小(类型转到int所在的位置)。

template<typename T>
constexpr T cexMax(T a, T b)
{
    return (a < b) ? b : a;
}

constexpr auto MaxEventSize()
{
    return cexMax(sizeof(int),
           cexMax(sizeof(int),
                    sizeof(int)));
};

2 个答案:

答案 0 :(得分:10)

auto返回类型&#34;没有尾随返回类型&#34;是一个C ++ 14的功能,所以我想你正在编译C ++ 11。

使用C ++ 14你的代码是正常的,但是对于C ++ 11,如果你想使用auto作为返回类型,你需要用这种方式描述有效的返回类型(注意:伪代码)

auto funcName (args...) -> returnType

您知道sizeof()返回std::size_t,因此您的示例可以更正为

constexpr auto MaxEventSize() -> std::size_t
{
    return cexMax(sizeof(int),
           cexMax(sizeof(int),
                    sizeof(int)));
};

或(愚蠢,在这种情况下,但在更复杂的例子中显示使用)

constexpr auto MaxEventSize() -> decltype( cexMax(sizeof(int),
                                                  cexMax(sizeof(int),
                                                         sizeof(int))) )
{
    return cexMax(sizeof(int),
           cexMax(sizeof(int),
                    sizeof(int)));
};

答案 1 :(得分:0)

为什么不只使用模板T?
替换行

Array

使用

from bs4 import BeautifulSoup as bs

html = '''
<div class="article-container">
  <p>tekst 1</p> <!-- this tag -->
  <p>none</p>
  <p>tekst 2</p> <!-- this tag -->
  <p>none</p>
  <p>tekst 3</p> <!-- this tag -->
  <p>none</p>
  <p>tekst 4</p> <!-- this tag -->
</div>
'''

soup = bs(html, 'lxml')
#odd indices
items = [item.text for item in soup.select('.article-container p:nth-child(odd)')]
print(items)

#excluding None
items = [item.text for item in soup.select('.article-container p:not(:contains("none"))')]
print(items)

#including tekst
items = [item.text for item in soup.select('.article-container p:contains("tekst")')]
print(items)

#providing nth list
items = [item.text for item in soup.select('.article-container p:nth-of-type(1), .article-container p:nth-of-type(3), .article-container p:nth-of-type(5), .article-container p:nth-of-type(7)')]
print(items)

在C ++ 11上应该可以正常工作。