假设我有这段代码。你的基本“如果来电者没有提供价值,计算价值”的情景。
void fun(const char* ptr = NULL)
{
if (ptr==NULL) {
// calculate what ptr value should be
}
// now handle ptr normally
}
并用
调用它fun(); // don't know the value yet, let fun work it out
或
fun(something); // use this value
然而,事实证明,ptr可以有各种值,包括NULL,所以我不能使用NULL作为调用者不提供ptr的信号。
所以我不确定现在给ptr提供什么默认值而不是NULL。我可以使用什么神奇的价值?有人有想法吗?
答案 0 :(得分:4)
void fun()
{
// calculate what ptr value should be
const char* ptr = /*...*/;
// now handle ptr normally
fun(ptr);
}
答案 1 :(得分:2)
根据您的平台,指针可能是32位或64位值。
在这些情况下,请考虑使用:
0xFFFFFFFF or 0xFFFFFFFFFFFFFFFF
但我认为更大的问题是,“如何将NULL作为有效参数传递?”
我建议改为使用另一个参数:
void fun(bool isValidPtr, const char* ptr = NULL)
或者也许:
void fun( /*enum*/ ptrState, const char* ptr = NULL)
答案 2 :(得分:2)
我同意所提供的所有其他答案,但这里还有另外一种处理方法,如果更详细,我个人看起来更明确:
void fun()
{
// Handle no pointer passed
}
void fun(const char* ptr)
{
// Handle non-nullptr and nullptr separately
}
答案 3 :(得分:1)
你应该使用nullptr。它是C ++ 11标准的新功能。看看here进行一些解释。
答案 4 :(得分:1)
最好使用相同函数的重载版本进行不同的输入,但如果要使用单个函数,则可以将参数设为指针指针:
void fun(const char** ptr = NULL)
{
if (ptr==NULL) {
// calculate what ptr value should be
}
// now handle ptr normally
}
然后你可以这样称呼它:
fun();
char *ptr = ...; // can be NULL
fun(&ptr);
答案 5 :(得分:1)
如果你想要一个与没有用的参数相对应的特殊值,那就做一个。
头文件:
extern const char special_value;
void fun(const char* ptr=&special_value);
实现:
const char special_value;
void fun(const char* ptr)
{
if (ptr == &special_value) ....
}
答案 6 :(得分:0)
1
我无法想象有人会用这个地址分配你的记忆。