基本上在下面我想知道我是否可以使用auto
关键字
假设我们有以下代码[适用于g ++ 4.9.2(Ubuntu 4.9.2-10ubuntu13)& clang版本3.6.0]:
//g++ -std=c++14 test.cpp
//test.cpp
#include <iostream>
using namespace std;
template<typename T>
constexpr auto create() {
class test {
public:
int i;
virtual int get(){
return 123;
}
} r;
return r;
}
auto v = create<int>();
int main(void){
cout<<v.get()<<endl;
}
如何指定v
的类型而不是使用。{
auto
关键字在声明/定义点?我试过create<int>::test v = create<int>();
,但这不起作用。
P.S。
1)这与我在Returning a class from a constexpr function requires virtual keyword with g++提出的问题不同,即使代码是相同的
2)我不想要在函数外定义类。
答案 0 :(得分:3)
实际类型是隐藏的,因为它在函数内部是本地的,因此您无法显式使用它。但是,您应该可以使用
中的decltype
decltype(create<int>()) v = create<int>();
当auto
有效时,我没有看到这样做的理由。