c++ - 警告 : function uses 'auto' type specifier without trailing return type

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

最佳答案

auto 返回类型“没有尾随返回类型”是 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)));
};

关于c++ - 警告 : function uses 'auto' type specifier without trailing return type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44798728/

相关文章:

c++ - 与 alignas 语法作斗争

c++ - 调用基类克隆实现

c++ - Netbeans "Resolve missing debugger command"C++

c++ - 防止编译器为 C++ 类定义复制构造函数和运算符 = 重载

c++ - 如何使用 CUDA 正确实现每个元素上的执行函数?

c++ - 可变类中的模板函数

c++ - 在C++中,执行时间差异(带有按引用传递的函数和按值传递的函数之间)是否显着?

c++ - 条件变量和共享互斥量

c++ - 编译器 g++ 无法创建 a.out 文件?

c++ - 编译器错误 : cannot convert from object_type<T> to object_type<T> in c++