为什么这个代码有效?与c++14
在主函数中声明的C++结构体
// Example program
#include <iostream>
#include <string>
using namespace std;
auto fun()
{
struct a
{
int num = 10;
a()
{
cout << "a made\n";
}
~a()
{
cout << "a destroyed\n";
}
};
static a a_obj;
return a_obj;
}
int main()
{
auto x = fun();
cout << x.num << endl;
}
是怎样的类型a
主可见?如果我更改auto x=
到a x=
它显然不能编译,但主要知道类型a
?
static
声明有,因为我试图测试其他的东西,但后来我偶然发现了这种行为。
运行在这里:https://wandbox.org/permlink/rEZipLVpcZt7zm4j
它知道是因为'fun'的返回类型,它被推断为'struct a'。 – nwp
如果我从'auto x ='更改为'a x =',它不会编译,为什么'auto'有效? – PYA
Becouse编译器会在编译时推导出返回的变量,所以他知道它会是'struct a'。如果你使用'a x =',编译器不会知道这个数据类型,因为它在另一个作用域中被声明。 –