/ / Недефинирани правила за поведение за i = ++ i и други подобни - c ++, езиков адвокат

Недефинирани правила за поведение за i = ++ i и други подобни - c ++, езиков адвокат

Продължавам да разчитам на недефинираните правила за поведение и да прочета следното:

Недефинирано поведение и точки на последователност
Защо е f (i = -1, i = -1) недефинирано поведение?
Защо `x -> 0` не е недефинирано поведение, докато` x = x - `е?

И В C ++ 11, "i + = ++ i + 1" показва недефинирано поведение?

И завърши с три въпроса:

  1. Прави ли недефинираните правила за поведение на формулярите i=i++ важи за неинтегрални типове? (Израза трябва да превежда на i.operator(i.operator++(i)), и тъй като всяко извикване на функция е точка на последователност тя трябва да бъде добре дефинирана, ако разбирам правилно правилно)
  2. Защо е f(i=-1, i=-1) недефинирано поведение в комбинация с "Резултатът от операцията по задаване е стойността, съхранена в левия операнд след извършване на задаването, резултатът е lvalue" (ref) [https://stackoverflow.com/a/4190054/258418]? (Разбирам, че стойността на i е неопределена след това, но функционалният коефициент трябва да бъде оценен като f(-1, -1) ако разбирам стандарта правилно.
  3. Кои видове изрази стават сигурни с c ++ 11/14 / 1z, само preincrement / predecrement в простата задача (не op=)?

Отговори:

2 за отговор № 1

Забрави за f (i = -1, i = -1), Да приемем, че имате две указатели int* p и int* q, и ви се обаждате

f (*p = 1, *q = 2)

Това е недефинирано поведение, ако p == q. Ако не искате да бъде недефинирано поведение, как бихте определили поведението в случая p == q? (Защото ако не ви харесва, че това е неопределено, трябва да го определите по някакъв начин). Освен това, бихте ли приели дефиниция на поведението, което означава, че 99,999% от кода може да се движат малко по-бавно, за да спаси някой явно идиотичен код?

След това идва случаят

f (*p = -1, *q = -1)

Така се присвоява същата стойност. Ако искате това да бъде определено поведение, но не и да се задават различни стойности, как на земята ви предлагаме да поставите това в разумно правило?