交换空隙* C++中的指针
我想问这种交换实现是否有效:交换空隙* C++中的指针,c++,swap,void,void-pointers,C++,Swap,Void,Void Pointers,我想问这种交换实现是否有效: void swap (void* &a, void* &b ) { void * tmp = a; a=b; b=tmp; } int main() { void * a; void * b; swap (a,b); return 0; } 我是否需要将对象的大小发送到swap方法并使用它?如果是这样,那么这个函数的好实现是什么呢?它可以工作。我不确定它是否像您认为的那
void swap (void* &a, void* &b )
{
void * tmp = a;
a=b;
b=tmp;
}
int main()
{
void * a;
void * b;
swap (a,b);
return 0;
}
我是否需要将对象的大小发送到swap方法并使用它?如果是这样,那么这个函数的好实现是什么呢?它可以工作。我不确定它是否像您认为的那样:指针值是交换的,而不是它们指向的任何对象。它可以工作。我不确定它是否做了您认为它做的事情:指针值被交换,而不是它们指向的任何对象。这个函数对于交换无效指针来说效果很好;编译器知道它们的大小。如果您想交换除void指针以外的其他对象,则需要一个不同的函数 编辑:但这是交换模板函数的常规模式:
template <class Ty>
void swap(Ty& lhs, Ty& rhs) {
Ty tmp = lhs;
lhs = rhs;
rhs = tmp;
}
这个函数可以很好地交换void指针;编译器知道它们的大小。如果您想交换除void指针以外的其他对象,则需要一个不同的函数 编辑:但这是交换模板函数的常规模式:
template <class Ty>
void swap(Ty& lhs, Ty& rhs) {
Ty tmp = lhs;
lhs = rhs;
rhs = tmp;
}
在我看来,指针只是一个指针,所以它指向的东西的大小并不重要,但为什么不直接使用它呢
在本例中,您正在处理未初始化的变量,这很糟糕,但这似乎不是您问题的重点。在我看来,指针只是一个指针,所以它指向的对象的大小无关紧要,但为什么不直接使用呢
在本例中,您正在处理未初始化的变量,这很糟糕,但这似乎不是问题的重点。您已将大小发送到swap方法。你说,这里有两个空指针,请交换它们。大小为sizeofvoid*。您已将大小发送到交换方法。你说,这里有两个空指针,请交换它们。尺寸是sizeofvoid*。你是什么意思?a现在不会指向b所指向的,反之亦然吗?或者你的意思是他们没有改变实际值,只是改变了他们的地址;a=新int42;b=新int17;swapa,b;,现在a将指向最初分配给b的内存,b将指向最初分配给a的内存。换句话说,值42和17保持不变。这取决于您实际想要实现的目标,无论这是否是您想要的。我的意思是,在以下代码中:f{some_type x,y;void*a=&x,*b=&y;swap a,b;}对象x和y不会改变,也不会被交换。但是现在a将指向y,b指向x,你是什么意思?a现在不会指向b所指向的,反之亦然吗?或者你的意思是他们没有改变实际值,只是改变了他们的地址;a=新int42;b=新int17;swapa,b;,现在a将指向最初分配给b的内存,b将指向最初分配给a的内存。换句话说,值42和17保持不变。这取决于您实际想要实现的目标,无论这是否是您想要的。我的意思是,在以下代码中:f{some_type x,y;void*a=&x,*b=&y;swap a,b;}对象x和y不会改变,也不会被交换。但现在a将指向y,b指向x。