2010-05-15 10 views
7

Estoy teniendo algunos problemas con este mensaje de advertencia, se implementa dentro de una clase contenedora de plantillaEl operando de la izquierda de la coma no tiene ningún efecto?

int k = 0, l = 0; 
    for (k =(index+1), l=0; k < sizeC, l < (sizeC-index); k++,l++){ 
     elements[k] = arryCpy[l]; 
    } 
    delete[] arryCpy; 

esta es la advertencia me sale

cont.h: In member function `void Container<T>::insert(T, int)': 
cont.h:99: warning: left-hand operand of comma has no effect 
cont.h: In member function `void Container<T>::insert(T, int) [with T = double]': 
a5testing.cpp:21: instantiated from here 
cont.h:99: warning: left-hand operand of comma has no effect 
cont.h: In member function `void Container<T>::insert(T, int) [with T = std::string]': 
a5testing.cpp:28: instantiated from here 
cont.h:99: warning: left-hand operand of comma has no effect 
>Exit code: 0 

Respuesta

16

La expresión coma a,b,c,d,e es similar a

{ 
    a; 
    b; 
    c; 
    d; 
    return e; 
} 

, por lo tanto, k<sizeC, l<(sizeC - index) sólo devolverá l < (sizeC - index).

Para combinar condicionales, use && o ||.

k < sizeC && l < (sizeC-index) // both must satisfy 
k < sizeC || l < (sizeC-index) // either one is fine. 
2

Cambiar a:

for (k =(index+1), l=0; k < sizeC && l < (sizeC-index); k++,l++){ 

Cuando se evalúa una expresión de coma, se devuelve el argumento de la derecha para que su:

k < sizeC, l < (sizeC-index) 

expresión se evalúa como:

l < (sizeC-index) 

y por lo tanto no alcanza

k < sizeC 

utiliza el && para combinar las condiciones en su lugar.

4

La expresión k < sizeC, l < (sizeC-index) solo devuelve el resultado de la prueba de la mano derecha. Utilice && combinar pruebas:

k < sizeC && l < (sizeC-index) 
Cuestiones relacionadas