use*_*248 2 c++ pointers casting constants nullptr
我有以下函数,它最初对函数参数执行一些验证.
char *doSomething(const char* first, const char* second) {
if((first == nullptr || *first == '\0') && (second == nullptr || *second == '\0')) {
return nullptr;
} else if (first == nullptr || *first == '\0') {
return (char *) second;
} else if (second == nullptr || *second == '\0') {
return (char *) first;
}
//doSomething
}
Run Code Online (Sandbox Code Playgroud)
强制转换函数参数是否返回一个char*指向内存中不同区域的新参数?我不想允许使用此函数的人操纵常量参数指向的值.我希望char*返回一个new ,其值与其中一个参数相同(如果是nullptr或者为空).
跟进:布尔变量会更好吗?我意识到我正在对每个变量执行两次相同的检查,但我不会在此函数的代码中的任何其他位置使用此布尔值.
不,它不会使任何新对象简单地转移const到您声明为不可变的内存区域.这通常会导致可怕的未定义行为,但如果它们来自非const指针,你就可以了(编辑 - 感谢@anatolyg).