为何C++11中std::is_same<int, *(int*)>::value的值为false?
C++11中
decltype(*int*)类型推导问题解析 你遇到的问题核心是对decltype的类型推导规则理解偏差:
- 对指针执行解引用操作
*num_ptr时,得到的是指向对象的左值(可被赋值的实体)。 decltype的推导规则里,若表达式是左值且不是单纯的标识符(比如直接写变量名num),则会推导出该类型的左值引用。
具体到你的代码:
decltype(num)推导结果是int(因为num是单纯的标识符,直接取其声明类型)。decltype(*num_ptr)推导结果是int&(因为*num_ptr是左值表达式,符合上述引用推导规则)。
两者类型不同,所以std::is_same<int, int&>::value的结果自然是0。
你可以通过以下代码验证这个结论:
#include <iostream> #include <type_traits> using namespace std; int main() { int num = 0; int *num_ptr = # cout<<std::is_same<decltype(num), decltype(*num_ptr)&>::value<<endl; // 输出1,int与int&的底层类型匹配 cout<<std::is_same<decltype((num)), decltype(*num_ptr)>::value<<endl; // 输出1,(num)是左值表达式,decltype推导为int& return 0; }
内容的提问来源于stack exchange,提问作者ppzzyy
相关产品推荐
相关产品推荐

