爲什麼這個代碼有效?與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 =',編譯器不會知道這個數據類型,因爲它在另一個作用域中被聲明。 –