以下代码在下面发出警告。有人可以解释原因吗(注意代码没有用,因为我用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
用作返回类型,则需要以这种方式描述有效的返回类型(警告:pseudocode(
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)));
};
为什么不使用模板t?
更换行
constexpr auto MaxEventSize()
template<typename T>constexpr T MaxEventSize()
应该与C 11一起工作。