Missa inte Amazon Prime Day i Dagens fynd
Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Jimicro
c == c++, false
c == ++c, true
c += c++, true
c >= c++, true

+= är väl inte någon boolesk operator?

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Jimicro
C kan vara vad som helst, men när man deriverar C blir den 0, men oftast skriver inte ut nånting

Ursprungligen inskrivet av Jimicro
c == c++, false
c == ++c, true
c += c++, true
c >= c++, true

Jimicro, om du försöker vara rolig är du inte det, annars är du är ute på hal is.
+= returnerar inte bool utan en referens till instansen (vilket i och för sig kan vara en bool om man t.ex. kör en_bool+=en_annan_bool) Jag antar att du menade <= men med dina tidigare inlägg börjar jag tveka.

C är inte alltid noll. C används som en benämning på att det är en konstant. Deriverar du en konstant får du mycket riktigt 0 men vad har det med saken att göra?

Citat:

Ursprungligen inskrivet av harre
Fast jag fick några varningar av kompilatorn som hintar mig att min kod inte är helt nykter

Dina varningar beror på att du aldrig tilldelar c något värde.

Visa signatur

citera!

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Jimicro
I matte D/E så är C en konstant. Så om C är F(x)=x^2+2x+C så är C==C++ för C är en konstant och blir alltid 0. F(x)=x^2+2x+C f´(x)=2x+x+0;

Det är min lösning till att C=C++

Hoppas du inte glömt cykelhjälmen för du är helt ute och cyklar.

Visa signatur

I'm Winston Wolfe. I solve problems.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av harre
Ännu mer spännande är att ifall man ändrar Weeblies kod till detta:

... Object C; Object D; if(C == D++) ...

Så får man "=="

Kikar du lite närmare på koden så ser du nog att det är ett väldefinerat beteende för detta fall (så länge som postfix-inkrementerings-operatorn har vanligt beteende).

Oavsett i vilken ordning "D++" och "C" evalueras så kommer de inte att påverka varandra.

Visa signatur

"Nothing is impossible because impossible itself says I M Possible..."

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Dosshell
Jimicro, om du försöker vara rolig är du inte det, annars är du är ute på hal is.
+= returnerar inte bool utan en referens till instansen (vilket i och för sig kan vara en bool om man t.ex. kör en_bool+=en_annan_bool) Jag antar att du menade <= men med dina tidigare inlägg börjar jag tveka.

C är inte alltid noll. C används som en benämning på att det är en konstant. Deriverar du en konstant får du mycket riktigt 0 men vad har det med saken att göra?

Ja, jag är ute och cyklar

Ser nu att hälften är rätt, det är bara för jag gjorde c till en int och inte bool. Kan vara därför

Så += är ingen bool operator. Så det var en liten miss bara

Allt var inte så genomtänkt skrivet, var osäker först om jag ens skulle posta hehe.

Men men, jag hoppas ingen tog skada utav det

Visa signatur

ATX: Intel Core i5 4690k | Asus Z97-A | MSI R9 390 8GB | 2x Corsair DDR3 2133Mhz | Crucial BX480Gb | Corsair TX650W | Fractal Design Define R4
mITX: Intel Core i3 6100 | Asus B150I | 2x8Gb Corsair DDR4 2133Mhz | Samsung 850 Evo 500GB | Cooler Master V750 | Fractal Design Define Nano S

Permalänk
Medlem

Vet inte vad för svamp folk har rökt i kommentarsfältet men:

> Allt man kan göra i C går väl att göra i C++?
Nej, finns rätt mycket språkskillnader som gäller åt båda hållen, implicit typkonvertering från void pekare till någon annan pekartyp, FAM (flexible array members), VLA's (variable length arrays), etc.

Gällande uttrycket C == C++ så är det odefinerat ända fram tills C++17 där det istället är ospecifierat. Så med andra ord kan man inte resonera kring vad resultatet blir, ökas C med 2? Ökas det med 1? Ökas det inte alls? Går din dator sönder? Ingen vet. Ett program som innehåller ett sådant uttryck är per standardens definition inkorrekt.

Permalänk
Medlem
Visa signatur

| Corsair Obsidian 500D | Intel Core i7-3770K 3.9GHz med Corsair iCUE H115i Elite Capellix XT | Asus Z77 Sabertooth | Corsair Vengeance Pro Black 4x8GB 1866MHz CL9 | 2x EVGA GeForce GTX TITAN X 12GB, SLI | X-Fi Titanium Fatal1ty Pro | Samsung 870 EVO 2TB, Samsung 870 EVO 1TB, 2x Seagate Barracuda 2TB | Corsair AX860i | DELL P991 Trinitron | Windows XP/10 Dual-Boot |

Permalänk
Medlem
Skrivet av 0xVali:

Vet inte vad för svamp folk har rökt i kommentarsfältet men:

> Allt man kan göra i C går väl att göra i C++?
Nej, finns rätt mycket språkskillnader som gäller åt båda hållen, implicit typkonvertering från void pekare till någon annan pekartyp, FAM (flexible array members), VLA's (variable length arrays), etc.

Gällande uttrycket C == C++ så är det odefinerat ända fram tills C++17 där det istället är ospecifierat. Så med andra ord kan man inte resonera kring vad resultatet blir, ökas C med 2? Ökas det med 1? Ökas det inte alls? Går din dator sönder? Ingen vet. Ett program som innehåller ett sådant uttryck är per standardens definition inkorrekt.

Lite kul att en nästan 13 år gammal tråd startas för att svara på det här.

https://en.cppreference.com/w/c/language/operator_precedence
Enligt det här bör C == C++ tolkas exakt likadant som:

C++; C == C;

Vilket ju självklart blir true.

Permalänk
Medlem
Skrivet av swesen:

Lite kul att en nästan 13 år gammal tråd startas för att svara på det här.

https://en.cppreference.com/w/c/language/operator_precedence
Enligt det här bör C == C++ tolkas exakt likadant som:

C++; C == C;

Vilket ju självklart blir true.

https://en.cppreference.com/w/c/language/eval_order
Säger att det är odefinierat.

Anledningen är att det i avsaknad av sekvenspunkter inte finns någon garanti för vilket av 'C' och 'C++' som evalueras först.

Permalänk
Medlem
Skrivet av swesen:

Lite kul att en nästan 13 år gammal tråd startas för att svara på det här.

https://en.cppreference.com/w/c/language/operator_precedence
Enligt det här bör C == C++ tolkas exakt likadant som:

C++; C == C;

Vilket ju självklart blir true.

Givetvis är det alltid kull att svara på gammal skit ;). Ja, operator precedensen stämmer men problemet ligger inte där utan i själva evalueringsordningen som är odefinerad < C++17, och ospecifierad >=C++17. Så det går inte att resonera kring vad resultatet blir då per standardens definition så är ett program som innehåller uttrycket C == C++ ogiltigt (fram till C++17 dvs, då det inte är strikt sett ogiltigt, bara ospecifierat).