而没有尾随返回类型

而没有尾随返回类型

本文介绍了警告:函数使用“自动"类型说明符,而没有尾随返回类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下代码给出以下警告.有人可以解释一下原因吗(请注意,该代码没有用,因为我用int替换了我的类型以构成一个完整的示例).

The following code gives the warning below. Can someone please explain why (note the code is not useful as is as I replaced my types with int to make a complete example).

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

warning: 'MaxEventSize()' function uses 'auto' type specifier without trailing return type [enabled by default]

想法是获取特定结构的最大大小(类型在 int 所在的位置).

The idea is to get the maximum size of a particular structure (types go where int is).

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)));
};

推荐答案

auto 返回类型无尾随返回类型"是C ++ 14功能,因此我想您正在编译C++ 11.

The auto return type "without trailing return type" is a C++14 feature, so I suppose you're compiling C++11.

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

Your code is OK with C++14, but for C++11, if you want use auto as return type, you need describe the effective return type in this way (caution: pseudocode)

auto funcName (args...) -> returnType

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

You know that sizeof() returns std::size_t, so your example can be corrected as

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

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

or (silly, in this case, but show the use in more complex examples)

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

这篇关于警告:函数使用“自动"类型说明符,而没有尾随返回类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-23 13:12