Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何最简洁地将变量初始化为0?_C++_C_Variables_Initialization - Fatal编程技术网

C++ 如何最简洁地将变量初始化为0?

C++ 如何最简洁地将变量初始化为0?,c++,c,variables,initialization,C++,C,Variables,Initialization,假设我们要声明三个整数,p,q和r。最佳做法是将它们初始化为0。C的方法是: int p, q, r; p = q = r = 0; P>这样做的C++方式是 int p(0), q(0), r(0); 在C语言中,事情很好,很紧凑;0仅使用一次。相反,对于每个变量,C++调用需要0次重复三次。有点冗长 P>有一种更简洁的方法,用C++方法初始化变量,或者是每个变量声明所需的初始值? P>还有C C风格初始化与C++代码的混合问题吗?Thx:^ 编辑:修复了正确编译的代码。现在,声明和初

假设我们要声明三个整数,p,q和r。最佳做法是将它们初始化为0。C的方法是:

int p, q, r;
p = q = r = 0;
P>这样做的C++方式是

int p(0), q(0), r(0);
在C语言中,事情很好,很紧凑;0仅使用一次。相反,对于每个变量,C++调用需要0次重复三次。有点冗长

<> P>有一种更简洁的方法,用C++方法初始化变量,或者是每个变量声明所需的初始值? <> P>还有C C风格初始化与C++代码的混合问题吗?Thx:^

编辑:修复了正确编译的代码。现在,声明和初始化变量需要两行代码,所以这个问题不是很好,但我将把它留给后代。希望能帮助别人


最佳做法是将它们初始化为0

这甚至可能是有害的,因为它会使编译器的保护无效。考虑下面的代码:

 int p, q, r;
 p = q = r = 0;

 // ...

 p = FIRST_INDEX;
 r = LAST_INDEX;    // ups, we forget to initialize q with some real value

 // ...
 doSomething(p, q, r);
通常,您会收到如下警告:

警告:“q”在此函数中未初始化使用[-Wuninitialized]

但是,由于q已经初始化,编译器认为这很好

将声明与代码混合在一起

如果你有C++或者至少C99符合编译器,那么你可以争论说,通过移动变量的声明最接近第一次使用,可以更好地设计代码:

// some executable code

int p = FIRST_INDEX;
int q = LAST_INDEX;
int r = getSampleCoefficient();

doSomething(p, q, r);
这样,可以完全避免前面示例中出现的问题,因为声明和实际代码之间没有差距


你可以使用p=q=r=0;在C++中,它只是编码风格的问题。 最佳做法是将它们初始化为0。->最佳实践是初始化它们。不同意to 0部分。根据我的经验,最佳做法是更好的变量名,每行初始化一次。有许多不同的样式,没有一个正确的答案。我喜欢在声明变量的行上用相同的值初始化变量,例如int p=0,q=0,r=0;C的方法是int p=0,q=0,r=0;甚至int p={0},q={0},r={0};使用={0}习惯用法。我不知道为什么用赋值代替初始化,并称之为C方式。除了C89/90的局限性导致的一些集中情况外,在C语言中没有用赋值替换初始化的传统。当您可以使用初始化时,千万不要使用赋值。而且,正如@chux正确指出的,最佳实践是为变量提供有意义的初始值设定项,而不是伪临时值设定项。有人甚至会说,让变量保持未初始化状态比用伪值执行cargo cult样式的初始化更好。您是否建议在有意义的值可用之前,让变量保持未初始化状态?我的至少两位教授认为,在声明变量时将变量初始化为0是最佳实践和防御性编码。@kmiklas:没错,现代编译器会告诉你,该变量未初始化。然而,最好的做法是声明这些变量最接近于第一次使用,这是允许的,因为从C99和C++以来,一直以来。