【发布时间】:2016-06-09 09:48:19
【问题描述】:
我在看,看到如下代码:
template <>
inline bool is_empty(const char* const& x)
{
return x==0 || *x==0;
}
const char* const& x 是什么意思?
我尝试了以下代码来理解它:
void f(const char* const& x)
{
// whatever
}
void main()
{
char a = 'z';
char &j = a;
f(a);//error
f(*a);//error
f(&a);//fine
f(j);//error
f(&j);//fine
f('z');//error
}
它仅适用于f(&a) 和f(&j)。
const char* const& x 究竟是什么意思?
【问题讨论】:
-
就像
f(const T&),其中T = const char*。 -
const限定了一个类型,使得修改对象变得不合时宜。您在每种情况下收到的错误消息都应该解释发生了什么。 -
请注意,它不是标题所说的引用指针(不存在这样的东西),而是对指针的引用。
-
我本来想说按引用传递似乎没用,但它看起来像是模板专业化,模板在一般情况下接受引用。
-
经验法则:从右到左阅读类型声明。所以“const char* const& x”的意思是“x 是对常量(第二个常量)指针(*)的引用(&),指向一个常量(第一个常量)的字符”。 -- 顺便说一句,这就是为什么我更喜欢等效的“char const * const & x”(x 是对指向常量 char 的常量指针的引用)。或类型定义。 typedef 是你的朋友。
标签: c++