为什么不是const B
and const A*
无法区分,当B
被类型定义为A*
?编译这个简单的例子时:
struct A {};
typedef A* B;
void f1(const A* a1);
void f2(const B a2);
int main()
{
const A a;
f1(&a);
f2(&a);
}
我得到以下编译器输出(G++ 6.3.1):
test.cpp: In function ‘int main()’:
test.cpp:12:8: error: invalid conversion from ‘const A*’ to ‘B {aka A*}’ [-fpermissive]
f2(&a);
请注意,调用f1
很好(因为&a
is-an A*
), but f2
不是,尽管const B
在我看来它应该相当于const A*
.
const B
means A * const
即指针本身是常量,但指针指向的对象不是常量。
另一方面const A *
意思是指针本身不是常量,但指针指向的对象是常量。
So const B
那是A * const
不是别名const A *
你可以写
typedef const A* B;
void f1(const A* a1);
void f2( B a2);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)