#include <string>
#include <type_traits>
class C
{
static auto func() { return std::string("hello"); }
static_assert(std::is_same<decltype(func()), std::string>::value, "");
};
GCC 和 Clang 都不接受这一点,并表示func
在定义之前使用。为什么?
改变推导的auto
返回类型为std::string
让它发挥作用。
The decltype
构造产生标识符或表达式的声明类型。什么时候func
使用返回类型声明,然后是调用表达式的类型func()
众所周知,一切都按预期进行。
然而,当func
使用返回类型占位符声明auto
,然后声明func
取决于它的定义,所以类型为func
,因此表达式func()
,在函数定义之前是未知的。
当您在类定义中内联定义类成员函数时,就好像该定义紧接在类定义末尾之后出现(即函数体可能会引用词法声明的名称)later在类定义中)。这个的结果和语义auto
这是你的职能吗auto func
实际上并不完全declared直到类定义结束,因此类型func()
到那时才能知道。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)