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

Ash*_*can 6 c++ return-type constexpr c++11 c++14

以下代码给出了以下警告.有人可以解释一下原因(注意代码没有用,因为我用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)));
};
Run Code Online (Sandbox Code Playgroud)

max*_*x66 15

auto返回类型"无尾返回类型"是一个C++ 14的功能,所以我想你正在编译C++ 11.

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

auto funcName (args...) -> returnType
Run Code Online (Sandbox Code Playgroud)

你知道sizeof()返回std::size_t,所以你的例子可以纠正为

constexpr auto MaxEventSize() -> std::size_t
{
    return cexMax(sizeof(int),
           cexMax(sizeof(int),
                    sizeof(int)));
};
Run Code Online (Sandbox Code Playgroud)

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

constexpr auto MaxEventSize() -> decltype( cexMax(sizeof(int),
                                                  cexMax(sizeof(int),
                                                         sizeof(int))) )
{
    return cexMax(sizeof(int),
           cexMax(sizeof(int),
                    sizeof(int)));
};
Run Code Online (Sandbox Code Playgroud)

  • @Jack-这里不需要使用`auto`;显然,您可以编写“ constexpr std :: size_t MaxEventSize()”。但是答案是在“如果要使用`auto`作为返回类型”的前提下进行的;我的意思是:这个答案试图解释如何使用“自动”方式指示返回类型。 (3认同)
  • 所以在c ++ 11中,为什么我要编写constexpr auto ...,比constexpr size_t ...? (2认同)