在vs2010环境下, 如下程序会输出什么?
#include <string>
#include <iostream>
using namespace std;
template<class T>
struct print;
template<>
struct print<int> { static string name() { return "int"; } };
template<class T>
struct print<T&> { static string name() { return print<T>::name() + " &"; } };
template<class T>
struct print<const T> { static string name() { return "const " + print<T>::name(); } };
// just utility functions above
struct S { int i; };
template<class T>
void foo(T) { cout << print<T>::name() << endl; }
template<class T>
void bar(T&) { cout << print<T>::name() << endl; }
int main() {
int i;
const int ci = 0;
const int *pci = &i;
S s;
const S *pcs = &s;
foo(i);
foo(ci);
foo(*pci);
foo(pcs->i);
bar(i);
bar(ci);
bar(*pci);
bar(pcs->i);
{
auto a1 = i;
auto a2 = ci;
auto a3 = *pci;
auto a4 = pcs->i;
cout << print<decltype(a1)>::name() << endl;
cout << print<decltype(a2)>::name() << endl;
cout << print<decltype(a3)>::name() << endl;
cout << print<decltype(a4)>::name() << endl;
}
{
auto& a1 = i;
auto& a2 = ci;
auto& a3 = *pci;
auto& a4 = pcs->i;
cout << print<decltype(a1)>::name() << endl;
cout << print<decltype(a2)>::name() << endl;
cout << print<decltype(a3)>::name() << endl;
cout << print<decltype(a4)>::name() << endl;
}
cout << print<decltype(i)>::name() << endl;
cout << print<decltype(ci)>::name() << endl;
cout << print<decltype(*pci)>::name() << endl;
cout << print<decltype(pcs->i)>::name() << endl;
cout << print<decltype((i))>::name() << endl;
cout << print<decltype((ci))>::name() << endl;
cout << print<decltype((*pci))>::name() << endl;
cout << print<decltype((pcs->i))>::name() << endl;
return 0;
}
现在还敢说你精通C++吗?