本文介绍了decltype作为类成员函数中的返回类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
编译以下代码时出现错误。
struct B {
double operator()(){
return 1.0;
}
};
struct A {
auto func() - > decltype(b())
{
return b();
}
B b;
};但是,如果我重新组织 A
,那么就可以使用
$ b
gcc 4.8表示'b'未在此范围内声明。
struct A {
B b;
auto func() - > decltype(b())
{
return b();
}
};
因此,第一个
=
类
的定义被处理两次:首先收集成员声明,包括函数签名,然后解析定义的主体。
因此,函数体可以访问所有成员声明,包括后续的声明,但是函数原型只能看到前面的声明。
I got error compiling below code.
struct B{
double operator()(){
return 1.0;
}
};
struct A {
auto func() -> decltype(b())
{
return b();
}
B b;
};
However, if I reorganize the A
, it compiles.
gcc 4.8 said that 'b' was not declared in this scope.
struct A {
B b;
auto func() -> decltype(b())
{
return b();
}
};
So, what is wrong with the first??
解决方案
The definition of the class
is processed it two passes: first the member declarations are collected, including function signatures, and then the bodies of definitions are parsed.
The function body therefore has access to all member declarations, including subsequent ones, but the function prototype only sees preceding declarations.
这篇关于decltype作为类成员函数中的返回类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!