2009-11-04 77 views
1

我有如下声明的函数传递一个值的值:如何获得通过引用在C++

void cleanValid(int valid[][4], int &size, int index); 

在实现这一功能的,我需要另设计数器等于通过了整数大小参考。我试图做类似:

int count; 
count = size; 

如果我没有记错的话,当我改变指望它会改变大小的价值以及价值。尽管如此,我不能这样做。我会如何将大小的值复制到count并保持独立?

+1

此外,最好是写'int count = size;',未初始化的变量是一场噩梦,如果你全部激活它们,你的编译器应该提供一个警告。如果你想要一个更广的范围,例如使用一个魔术值来初始化'int count = 0;',但不要让它处于一个未定义的值(C++不能保证内置将被初始化,尽管在调试模式下一些编译器会做到这一点,比如VC++)。 – 2009-11-04 10:34:09

+0

IMO最好不要初始化该值,而不要使用魔术初始化值。如果您不小心最终使用了未初始化的变量,则可能会发生编译器警告。如果你不小心使用了无意义的值,你的代码就不会做它应该做的事情,而且你肯定不会得到任何警告。在0意味着某些情况下,应该保存为0的显式初始化。 – 2009-11-04 14:14:21

回答

12

不,你错了。当你从引用读入一个非引用变量时,你并没有在两者之间建立任何联系。您当时将拥有size的独立副本,没有别的。

如果你想影响size的价值,你将不得不使用一个参考吧:

int& count = size; 

/* ... */  
count= 32; /* This will change size, too. */ 
2

int count = size副本大小的值到计数。如果您在修改副本后更改计数,则尺寸将保持不变。

3

如果你不想size改变,为什么不传值/ const引用?

void cleanValid(int valid[][4], int size, int index); 
在这两个选项

void cleanValid(int valid[][4], const int &size, int index); 

确保size没有改变 - 通过让它的编译器照顾。

+0

另外,在第一个示例中,您可以直接使用大小。你可以随心所欲地做任何事情,而且你不需要将它复制到局部变量中。此外,在某些情况下,int小于参考值,因此复制可能会更少。 – Tim 2009-11-05 09:19:52