我在网站上看到这个例子,网站提到:- “它的用途之一(空指针)可能是将泛型参数传递给函数”
// increaser
#include <iostream>
using namespace std;
void increase (void* data, int psize)
{
if ( psize == sizeof(char) )
{ char* pchar; pchar=(char*)data; ++(*pchar); }
else if (psize == sizeof(int) )
{ int* pint; pint=(int*)data; ++(*pint); }
}
int main ()
{
char a = 'x';
int b = 1602;
increase (&a,sizeof(a));
increase (&b,sizeof(b));
cout << a << ", " << b << endl;
return 0;
}
像下面这样写代码不是更简单吗?
void increaseChar (char* charData)
{
++(*charData);
}
void increaseInt (int* intData)
{
++(*intData);
}
int main ()
{
char a = 'x';
int b = 1602;
increaseChar (&a);
increaseInt (&b);
cout << a << ", " << b << endl;
string str;
cin >> str;
return 0;
}
它的代码更少,而且非常简单。在第一个代码中,我必须在这里发送数据类型的大小,但我没有!
最佳答案
最好使函数类型安全且通用。最好通过引用而不是指针来获取参数:
template <typename T>
void increment(T& data) {
++data;
}
在 C++ 中应尽可能避免 void*
,因为模板和继承提供了类型安全的替代方案。
关于c++ - C++ 中的空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4304940/