我试图id
在C++中使用以下函数.我原以为我可以干脆做;
typedef int v3[3]; v3 & id( v3 & in ) { in[0] = in[1] = in[2] = 1; return in; } int main() { v3 & v = id( v ); return 0; }
然而,这导致了一个段错g++
(我不清楚).因为我可以使用标量类型执行以下操作:
int & zero( int & in ) { in = 0; return in; } int main() { int i = zero( i ); return 0; }
如何使用id
单行代码?我想避免一个丑陋的解决方案,例如:
int main() { v3 v; v3 & w = id( v ); }
当然我不想用std::vector
或std::array
(c ++ 11).所以我真的很感兴趣,为什么我的天真解决方案实际上是undefined behavior
.
编辑:std::vector
将需要动态分配,在我的情况下应该避免(我需要操纵数千vr3
).我不能使用,std::array
因为我被要求坚持c++03
.显然人们无法猜测我的要求.
这个:
v3 & v = id( v );
还有这个:
int i = zero( i );
是胡说八道,因为你不能在自己的初始化程序中使用某些东西.一些编译器会警告你这个,但有些不会.
你可以做一个宏:
#define V3_UNIT {1,1,1}
现在你可以这样做:
v3 v = V3_UNIT;
PTHREAD_MUTEX_INITIALIZER
这是野外这种技术的一个常见例子.