如果不为null,则为指针赋值
Assign value to pointer if not null
我有一个整数指针作为默认函数参数。如果它不为空,我想分配一些值,可能是200行中的每10行。在每次作业前进行标准检查,我的代码很容易变得很大,更难阅读。(我指的是源文件的长度和可读性,而不是二进制大小。(
这是一个好的做法来取代这个:
// Previous statement
// Use to put empty line here
if(ptr)
*ptr = val;
// Empty line also here
// Next statement
这个:
// Previous statement
assignIfNotNull(ptr, val);
// Next statement
并将if置于函数中?
inline void assignIfNotNull(int *ptr, int val)
{
if(ptr)
*ptr = val;
}
现在,我似乎一丝不苟,但这将节省3行每次使用。也许这不是我编程风格中最糟糕的东西,是我独自学习时即兴创作的。我想压制它,要求并保持标准。(我在任何地方都找不到这个。(
提前谢谢。
你可以去:
T dummy;
if ( !ptr )
ptr = &dummy;
开始时;然后您可以在以后安全地编写CCD_ 1,而不需要进行null检查。
如果ptr
的原始值很重要,您可以调用参数orig_ptr
或其他什么。
C++的C#零合并运算符等价物几乎完全问你的问题,但不要指望找到一些突破性的解决方案-三元运算符、模板和宏只有一些变体:
ptr = (ptr != null ? ptr : MY_DEFAULT)
//------------------- or as function
template<class T>
GetValueOrDefault(T* value, T* defaultValue) // or put your own types
{
return value != null ? value : defaultValue;
}
ptr = GetValueOrDefault(ptr, MY_DEFAULT);
//------------------- or as macro
#define GET_VALUE_OR_DEFAULT(value, defaultValue) (value != null ? value : defaultValue)
ptr = GET_VALUE_OR_DEFAULT(ptr, MY_DEFAULT);
//------------------- or like this macro
#define VALUE_OR_DEFAULT(value, defaultValue) value = (value != null ? value : defaultValue)
VALUE_OR_DEFAULT(ptr, MY_DEFAULT);
但你应该考虑以下几点:
- 不要想象没有问题的时候会有什么问题——对一些API来说,大量的检查和重新初始化是完全可行的——只需看看WINAPI
- 您确定应该覆盖此变量吗?也许是你可以重写您的函数或API以不重写它
您也可以考虑使用一些临时变量来代替
ptr
-它不会解决问题,只是把它颠倒过来,但是这可能会提高你的整体理解能力功能和删除检查:char* tempPtr = ptr; retCode = RandomlyNullifyThePtr(&tempPtr); // RandomlyNullifyThePtr can nullify the ptr it gets , // but it won't nullify the ptr in calling function.
如果您在保持整个功能时遇到问题良心,那么这是应该重构的直接迹象-分成更小的部分,这样的支票可能会变成不必要:
retCode = CompletePart1(ptr); // CompletePart1 can nullify the ptr it gets, // but it won't nullify the ptr in calling function. ... retCode = CompletePart2(ptr);
相关文章:
- 错误:在为指针赋值时,void值没有被忽略
- 关于 c++ 函数中指针赋值的简单问题
- 链表指针赋值为什么我们不能直接将尾巴分配给 temp 而不是尾巴>尾巴下一个
- 为什么通过指针赋值常量没有效果?
- 复制构造函数中的指针赋值
- C++ 指针赋值运算符重载(不仅是对象赋值,还有指针赋值)
- 从字符串数组打印其中一个字符串时出现空指针赋值错误
- 为字符串指针赋值
- 动态指针赋值c++
- std::wstring指针赋值C++
- C++匿名结构指针赋值
- 为指针赋值而不赋值
- 此指针赋值应生成段错误
- 指向指针赋值的指针
- 哪个指针赋值更好(C++)
- <T>unique_ptr.get() 方法在使用原始指针赋值时调用析构函数?
- 为用soap_alloc创建的std::string指针赋值
- 为什么函数头的更改会导致指针赋值不起作用
- 64位c++指针赋值
- 在函数中将指针赋值到不同的地址