В первых двух случаях операторы используют оператор запятой C ++
В последнем случае запятая используется в качестве отдельной переменной, и компилятор ожидает, что вы объявите несколько идентификаторов; запятая здесь не используется как оператор.
Последний случай похож на что-то вроде:
float x,y;
float a = 10, b = 20;
Когда вы делаете это:
double d = 1, 7;
Компилятор ожидает идентификатор переменной, а не числовую константу. Следовательно, 7 здесь незаконно.
Однако, когда вы делаете это:
double d = (1,7);
используется обычный оператор запятой: 1 оценивается и отбрасывается, а 7 сохраняется в d.