c中的自动引用
发布时间:2020-12-16 07:20:23 所属栏目:百科 来源:网络整理
导读:这段代码在visual studio 2015中给出了奇怪的调试信息 int main() { const int i = 42; auto j = i; const auto k = i; auto *p = i; const auto j2 = i,k2 = i;} 结果类型是: k = const int k2 = const int * 我认为这些都应该是const intamp ;. 问题是,为
这段代码在visual studio 2015中给出了奇怪的调试信息
int main() { const int i = 42; auto j = i; const auto &k = i; auto *p = &i; const auto j2 = i,&k2 = i; } 结果类型是: &k = const int & &k2 = const int * 我认为这些都应该是const int& ;. 问题是,为什么我的Visual Studio Debugger说& k和& k2是不同类型的? 解决方法
k和k2都是const int&类型.
这是完整的类型列表.请注意,顶级const将被丢弃以进行自动类型扣除. int main() { const int i = 42; auto j = i; // i is an int (const is top-level) const auto &k = i; // k is a const int& auto *p = &i; // p is a const int* (const persists as not top-level). const auto j2 = i,&k2 = i; // j2 is a const int,k2 is a const int& } 最后,如果你写了 auto q = &k2; 那么q的类型是一个const int *,因为const不是顶级的,所以不会丢弃而是自动类型推导.这将恢复您观察到的调试信息. j2和k2看起来不一样,但实际上这是由于声明如何与逗号一起使用,参见可以通过写作来解决混淆 const int j2 = i,& k2 = i; 您总是可以使用C11标准库函数is_same确定: bool am_I_the_same = std :: is_same< decltype(k2),const int&):: value 其中decltype恢复其参数的类型. 参考:http://en.cppreference.com/w/cpp/types/is_same (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读