gpt4 book ai didi

c++ - 为什么尚未定义具有推导返回类型的内联方法?

转载 作者:太空狗 更新时间:2023-10-29 20:53:34 26 4
gpt4 key购买 nike

#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 使其工作。

最佳答案

decltype 构造产生标识符或表达式的声明类型。当使用返回类型声明 func 时,调用表达式 func() 的类型是已知的,并且一切都按预期工作。

但是,当 func 声明为返回类型占位符 auto 时,func 的声明取决于它的定义,所以 func 的类型以及表达式 func() 的类型在定义函数之前是未知的。

当您在类定义中内联定义类成员函数时,就好像该定义紧跟在类定义结束之后出现(也就是说,函数体可能引用词法声明的名称 < em>later 在类定义中)。这和 auto 的语义的结果是你的函数 auto func 在类定义结束之前实际上并没有完全声明,并且因此 func() 的类型直到那时才知道。

关于c++ - 为什么尚未定义具有推导返回类型的内联方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42329757/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com