decltype和auto之间的等价
由于auto和decltype都用于推断类型。我以为 他们会一样。decltype和auto之间的等价
但是,this问题的答案是否定的。
我仍然认为它们不能完全不同。 我能想到一个简单的例子,其中i
的类型在以下两种情况下都是相同的。
auto i = 10; and decltype(10) i = 10;
那么auto和decltype行为等价的可能情况是什么?
auto
行为完全相同一样的模板参数推导,这意味着如果不指定对它的引用,你没有得到一个。 decltype
是表达的只是类型,因此需要引用到:
#include <type_traits>
int& get_i(){ static int i = 5; return i; }
int main(){
auto i1 = get_i(); // copy
decltype(get_i()) i2 = get_i(); // reference
static_assert(std::is_same<decltype(i1), int>::value, "wut");
static_assert(std::is_same<decltype(i2), int&>::value, "huh");
}
auto也可以与decltype一起使用。 http://msdn.microsoft.com/en-us/library/dd537655.aspx – 2012-07-12 20:22:31
@ 0A0D:这只是后期指定的返回类型。 – Xeo 2012-07-12 20:24:04
更具体地说,'decltype'将其表达式的值类别转换为引用限定:左值被限定为左值引用,而xvalue被限定为右值引用。 get_i()的类型不是“int&',”它是“int类型的左值。表达式从来没有引用类型。 – 2012-07-12 20:24:43
你在第二定义重复10。这不足以区别吗?这是给我的。 'auto'在日常生活中比'decltype'更有用,它主要用作元编程工具。 – 2012-07-12 20:18:57
现在,我只关心推断的类型。 – 2012-07-12 20:21:11
它们并不完全不同。你现在喜欢的其他答案呢? – 2012-07-12 20:21:28