decltype和auto之间的等价性
equivalence between decltype and auto
由于auto和decltype都用于推断类型。我想他们会是一样的。
然而,这个问题的答案表明情况并非如此。
尽管如此,我认为它们不可能完全不同。我可以想到一个简单的例子,其中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");
}
Ideone上的实例。
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 在cuda线程之间共享大量常量数据
- 在c代码之间共享数据的最佳方式
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 大小相等但成员数量不同的结构之间的性能差异
- 类与私有变量的其他类之间的线程安全性
- 如何在cpp文件之间切换窗口?在Qt中
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 线程之间的布尔停止信号
- const auto & 和 auto & if reference 对象之间的区别是 const
- C# "var"和C++ "auto"之间的差异
- 使用auto声明变量和使用类型名称之间的区别是什么
- decltype和auto之间的等价性
- C++0X 中的 auto 和 decltype 之间的区别
- "int &&"和"auto &&"之间的不同行为
- C++ : const int * 和 cont int & 之间的 auto 类型不同的扣除