从我的角度来看可能是一个概念上的错误,但我要说我有一个以char *
为参数的函数;也就是说,一个C风格的字符串。但我想确保char *
指向某事。我可以使用类似的东西:
foo(const char * const &cstring)
指定我希望cstring
成为对const
的{{1}}引用?
这样我就不需要在const char *
内检查NULL指针。
答案 0 :(得分:4)
这并不能阻止你获得NULL指针......你得到一个指针的引用......这意味着机器中reference-argument所代表的内存地址(或寄存器)中的值 - 代码级别将是指针的地址,而不是指针值本身。因此,指针仍然可以为其分配NULL值。
因此,虽然参数本身可能不是NULL(因为如果参数是指针,可能是这样),但指针指向的值可能为NULL,因此您仍然需要检查NULL指针。 / p>
答案 1 :(得分:4)
您所编写的内容确保引用本身绑定到可能仍然为空的有效指针。没有任何编译时间来做你想做的事。
您最好不要使用C字符串,而是按值或const引用取std::string
。如果那不合适,那么拿const char*
,在函数文档中输入null不被接受,并做一个运行时声明指针不为空。
答案 2 :(得分:3)
您将const-reference传递给C字符串,但不 guarentee cstring
本身包含值 NULL。您仍然需要在cstring == NULL
内手动核对foo
。这就像int const&
不会因为不允许你传递值 0而烦恼。
答案 3 :(得分:0)
引用相当于T* const ptr_name
。
第二件事是我会说你总是要检查空指针。