Joe*_*yga 6 c++ pointers reference
我有一个函数,我将迭代器传递给char*缓冲区(也是一个char*).该函数需要递增迭代器.无论如何,我发现将迭代器传递给函数的一个好方法是通过引用传递指针:
bool myFunction(unsigned char * &iter)
{
...
Run Code Online (Sandbox Code Playgroud)
但是,我听说这是不好的形式,可能会导致问题.这是我的同事建议我使用的方法:
typedef unsigned char * unsignedcharptr;
bool myFunction(unsignedcharptr &iter)
{
...
Run Code Online (Sandbox Code Playgroud)
在我看来,他们都在做同样的事情.这两种方法之间是否存在编译器差异(我使用的是Visual Studio 2005)?哪个是对的?
我认为这两者之间没有任何区别.你应该问你的同事他认为有什么.
什么可能是原因是可维护性,在这里如果你想从切换unsigned char *到char *你只需要改变一个地方.但我认为,这可能导致其他问题.
这两种方法之间是否存在编译器差异(我使用的是Visual Studio 2005)?
正如其他人正确指出的那样,"不".
哪个是对的?
在两种选择之间,它完全归结为"我应该隐藏在typedefs背后的指针"辩论.任何一个职位都有有效的论据
但是,我认为您的两个代码段都受到过度专业化的影响.我更喜欢将算法编码为模板函数,这样我就不会重复自己了.
如果您的设计支持它,您可以将代码概括为接受任何迭代器:
template <class InputIterator>
bool myFunction(InputIterator &iter)
{
std::cout << *iter;
++iter;
return true;
}
Run Code Online (Sandbox Code Playgroud)