левый операнд запятой никак не влияет? - PullRequest
7 голосов
/ 15 мая 2010

У меня возникли проблемы с этим предупреждением, оно реализовано в классе контейнера шаблона

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

это предупреждение, которое я получаю

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

Ответы [ 3 ]

16 голосов
/ 15 мая 2010

выражение запятой a,b,c,d,e похоже на

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

следовательно, k<sizeC, l<(sizeC - index) вернет только l < (sizeC - index).

Чтобы объединить условные выражения, используйте && или ||.

k < sizeC && l < (sizeC-index)  // both must satisfy
k < sizeC || l < (sizeC-index)  // either one is fine.
4 голосов
/ 15 мая 2010

Выражение k < sizeC, l < (sizeC-index) возвращает только результат правого теста. Используйте && для объединения тестов:

k < sizeC && l < (sizeC-index)
2 голосов
/ 15 мая 2010

Изменить на:

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

Если у вас есть выражение запятой, возвращается самый правый аргумент, поэтому ваше выражение:

 k < sizeC, l < (sizeC-index)

оценивается как:

 l < (sizeC-index)

и, следовательно, пропускает

 k < sizeC

, вместо этого используйте && для объединения условий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...