Apa yang dimaksud dengan operator "->" di C ++?

Setelah membaca Fitur Tersembunyi dan Sudut Gelap C ++ / STL di comp.> , saya benar-benar terkejut bahwa cuplikan berikut dikompilasi dan bekerja di Visual Studio 2008 dan g ++ 4.4.

Ini kodenya:

 #include <stdio.h> int main() { int x = 10; while (x --> 0) // x goes to 0 { printf("%d ", x); } } 

Saya akan menyarankan bahwa ini adalah C, karena berfungsi di GCC. Di mana ia didefinisikan dalam standar dan dari mana asalnya?

8054
29 окт. diatur oleh GManNickG 29 Oktober. 2009-10-29 09:57 '09 jam 9:57 2009-10-29 09:57
@ 25 jawaban

--> bukan operator. Sebenarnya, ini adalah dua operator yang terpisah, -- dan > .

Kode kondisional mengurangi nilai x dengan mengembalikan nilai x yang asli (tidak dikurangi), dan kemudian membandingkan nilai asli dengan 0 menggunakan operator > .

Untuk lebih memahami ungkapan bisa dituliskan sebagai berikut:

 while( (x--) > 0 ) 
7743
29 окт. balasan diberikan kepada Charles Salvia pada 29 Okt 2009-10-29 10:00 '09 pada 10:00 2009-10-29 10:00

Atau untuk sesuatu yang sangat berbeda ... x tergelincir ke 0

 while (x --\ \ \ \ > 0) printf("%d ", x); 
border=0

Tidak secara matematis, tapi ... setiap gambar menarik seribu kata ...

2564
18 янв. jawabannya diberikan tidak tersinkronisasi 18 Jan 2012-01-18 14:18 '12 pada 14:18 2012-01-18 14:18

Ini adalah operator yang sangat kompleks, sehingga bahkan ISO / IEC JTC1 (Joint Technical Committee 1) menempatkan deskripsinya dalam dua bagian berbeda dari Standar C ++.

Bercanda di samping, ini adalah dua operator yang berbeda: -- dan > , yang dijelaskan masing-masing di bagian 5.2.6 / 2 dan di bagian 5.9 dari standar C ++ 03.

2265
29 окт. jawabannya diberikan oleh Kirill V. Lyadvinsky pada 29 Oktober. 2009-10-29 11:38 '09 pada 11:38 2009-10-29 11:38

Ini setara dengan

 while (x-- > 0) 

x-- (setelah dikurangi) sama dengan x = x-1 jadi kodenya dikonversi menjadi:

 while(x > 0) { x = x-1; // logic } 
1183
29 окт. Jawabannya diberikan oleh Jay Riggs pada 29 Oktober. 2009-10-29 10:00 '09 pada 10:00 2009-10-29 10:00

x dapat mencapai nol lebih cepat dalam arah yang berlawanan:

 int x = 10; while( 0 <---- x ) { printf("%d ", x); } 

8 6 4 2

Anda dapat mengontrol kecepatan dengan panah!

 int x = 100; while( 0 <-------------------- x ) { printf("%d ", x); } 

90 80 70 60 50 40 30 20 10

;)

961
28 дек. jawabannya diberikan doc 28 Desember. 2014-12-28 03:32 '14 pada 3:32 2014-12-28 03:32

Itu

 #include <stdio.h> int main(void){ int x = 10; while( x-- > 0 ){ // x goes to 0 printf("%d ", x); } return 0; } 

Hanya ruang yang membuat hal-hal menyenangkan, berkurang, dan sebanding.

513
29 окт. jawabannya diberikan RageZ 29 Oktober. 2009-10-29 10:00 '09 pada 10:00 2009-10-29 10:00

Gunakan --> memiliki signifikansi historis. Pengurangan adalah (dan masih dalam beberapa kasus) lebih cepat daripada menambah arsitektur x86. Menggunakan --> , anggap x mendekati 0 dan merujuk pada mereka yang memiliki latar belakang matematika.

380
18 нояб. Jawabannya diberikan oleh Matt Joiner pada 18 November. 2009-11-18 15:47 '09 pada 15:47 2009-11-18 15:47
 while( x-- > 0 ) 

bagaimana itu dianalisis.

332
29 окт. balasan yang diberikan oleh Grumdrig 29 Okt. 2009-10-29 10:00 '09 pada 10:00 2009-10-29 10:00

Benar-benar geek, tapi saya akan menggunakan ini:

 #define as ;while int main(int argc, char* argv[]) { int n = atoi(argv[1]); do printf("n is %d\n", n) as ( n --> 0); return 0; } 
310
18 мая '10 в 23:33 2010-05-18 23:33 jawabannya diberikan oleh Escualo pada 18 Mei '10 di 23:33 2010-05-18 23:33

Satu buku yang saya baca (saya tidak ingat buku apa itu) menyatakan: Penyusun mencoba mem-parsing ekspresi menjadi token terbesar menggunakan aturan kiri-kiri.

Dalam hal ini, ungkapan:

 x-->0 

Parsis untuk token terbesar:

 token 1: x token 2: -- token 3: > token 4: 0 conclude: x-- > 0 

Aturan yang sama berlaku untuk ungkapan ini:

 a-----b 

Setelah penguraian:

 token 1: a token 2: -- token 3: -- token 4: - token 5: b conclude: (a--)-- - b 

Saya harap ini membantu untuk memahami ekspresi yang kompleks ^^

291
09 апр. jawabannya diberikan oleh NguyenDat 09 Apr 2010-04-09 03:04 '10 pada 3:04 2010-04-09 03:04

Persis sama dengan

 while (x--) { printf("%d ", x); } 

untuk nomor non-negatif

246
31 дек. Jawabannya diberikan oleh Orang Baik pada tanggal 31 Desember 2009-12-31 16:48 '10 pada 16:48 2009-12-31 16:48

Bagaimanapun, kita sekarang memiliki operator "datang." "-->" mudah diingat sebagai arah, dan "sementara x pergi ke nol" berarti "lugas."

Selain itu, ini sedikit lebih efisien daripada "for (x = 10; x > 0; x --)" pada beberapa platform.

224
29 окт. jawaban yang diberikan Test 29 Okt. 2009-10-29 17:45 '09 pada 17:45 2009-10-29 17:45

Kode ini pertama-tama membandingkan x dan 0, dan kemudian mengurangi x. (Juga, jawaban pertama mengatakan: Anda meng-post-decrement x, dan kemudian membandingkan x dan 0 dengan operator > .) Lihat Output dari kode ini:

 9 8 7 6 5 4 3 2 1 0 

Sekarang pertama-tama kita membandingkan dan kemudian mengurangi, melihat 0 pada output.

Jika kita ingin mengurangi dulu dan kemudian membandingkan, gunakan kode ini:

 #include <stdio.h> int main(void) { int x = 10; while( --x> 0 ) // x goes to 0 { printf("%d ", x); } return 0; } 

Kesimpulan ini:

 9 8 7 6 5 4 3 2 1 
206
18 нояб. Jawabannya diberikan oleh Sajad Bahmani 18 November 2009-11-18 15:52 '09 pada 15:52 2009-11-18 15:52

Kompiler saya akan mencetak 9876543210 ketika Anda menjalankan kode ini.

 #include <iostream> int main() { int x = 10; while( x --> 0 ) // x goes to 0 { std::cout << x; } } 

Seperti yang diharapkan. Nilai while( x-- > 0 ) berarti while( x > 0) . x-- memposting pengurangan x .

 while( x > 0 ) { x--; std::cout << x; } 

- Ini adalah cara lain untuk menulis hal yang sama.

Sangat bagus bahwa aslinya terlihat seperti "sementara x pergi ke 0".

160
17 янв. jawabannya diberikan cool_me5000 17 januari . 2010-01-17 03:46 '10 pada 3:46 2010-01-17 03:46

Tidak ada ruang antara -- dan > . x post decremented, mis. berkurang setelah memeriksa kondisi x>0 ? .

133
Jawaban diberikan oleh Bp. 28 дек. X 28 Des 2009-12-28 19:32 '10 pada 19:32 2009-12-28 19:32

-- - penurunan operator, dan > - operator lebih banyak .

Dua operator diterapkan sebagai satu, misalnya --> .

124
06 апр. balas sam 06 apr. 2010-04-06 13:45 '10 pada 13:45 2010-04-06 13:45

Ini adalah kombinasi dari dua operator. Yang pertama dimaksudkan untuk mengurangi nilai, dan > untuk memeriksa apakah nilainya lebih besar dari operan yang tepat.

 #include<stdio.h> int main() { int x = 10; while (x-- > 0) printf("%d ",x); return 0; } 

Outputnya adalah:

 9 8 7 6 5 4 3 2 1 0 
117
02 апр. Jawaban diberikan oleh Rajeev Das 02 Apr. 2013-04-02 14:22 '13 pada 14:22 2013-04-02 14:22

Faktanya, x post-decremented dan kondisi ini diperiksa. Ini bukan --> , itu (x--) > 0

Catatan: nilai x berubah setelah memeriksa kondisi, karena ini adalah post-decremented. Beberapa kasus serupa juga dapat terjadi, misalnya:

 --> x-->0 ++> x++>0 -->= x-->=0 ++>= x++>=0 
112
18 авг. Jawabannya diberikan oleh AndroidLearner 18 Agustus. 2012-08-18 10:34 '12 pada pukul 10:34 2012-08-18 10:34

C dan C ++ ikuti aturan "maksimum mengunyah". Sama seperti --- b diterjemahkan ke (a--) - b , dalam kasus Anda x-->0 diterjemahkan ke (x--)>0 .

Apa aturan dasarnya mengatakan adalah bahwa gerakan dari kiri ke kanan, ekspresi dibentuk dengan mengadopsi karakter maksimum yang akan membentuk ekspresi yang benar.

105
10 февр. Jawabannya diberikan oleh Pandrei 10 Feb. 2014-02-10 20:29 '14 pada 20:29 2014-02-10 20:29

Kenapa semua komplikasinya?

Jawaban sederhana untuk pertanyaan awal:

 #include <stdio.h> int main() { int x = 10; while (x > 0) { printf("%d ", x); x = x-1; } } 

Melakukan hal yang sama. Bukan mengatakan bahwa Anda harus melakukannya seperti ini, tetapi dia melakukan hal yang sama dan akan menjawab satu pertanyaan.

x-- hanya singkatan untuk yang di atas, dan > hanya lebih normal daripada operator x-- . Bukan rahasia besar!

Ada terlalu banyak orang melakukan hal-hal sederhana saat ini;)

23
27 окт. Jawaban diberikan kepada Garry_G 27 Okt. 2016-10-27 18:09 '16 jam 6:09 sore 2016-10-27 18:09

Dengan cara biasa, kita mendefinisikan kondisi dalam tanda kurung loop " () " dan kondisi terminasi di dalam tanda kurung keriting " {} ", tetapi ini dan > adalah cara semua orang mendefinisikan semuanya sekaligus. Misalnya, misalnya:

 int abc(){ int a = 5 while((a--) > 0){ // Decrement and comparison both at once // Code } } 

Dikatakan, mengurangi a dan memulai siklus sampai waktu lebih besar dari 0

Cara lain seharusnya:

 int abc(){ int a = 5 while(a > 0){ // Code a = a -1 // Decrement inside loop } } 

di kedua arah, kami melakukan hal yang sama dan mencapai tujuan yang sama.

20
28 мая '17 в 23:10 2017-05-28 23:10 jawabannya diberikan Zohaib Ejaz 28 Mei '17 pada 23:10 2017-05-28 23:10

C / C ++ mengabaikan spasi dengan kondisi. Intinya, kodenya

 while (x --> 0) 

sama dengan

 while (x-- > 0) 

atau

 while(x > 0){ x = x - 1 ... 

Menggunakan post-decrement dalam kondisi. Katakanlah x = 10 . Operator kondisi adalah 10>0 dan printf("%d ", x); operator di loop akan memberikan 9 pada run pertama. Untuk putaran kedua, kondisinya akan menjadi 9>0 dan segel akan sama dengan 8 dan seterusnya hingga kondisi 0>0 .

0
06 сент. jawabannya diberikan Zirk 06 sep. 2018-09-06 00:20 '18 pada 0:20 2018-09-06 00:20

--> pada dasarnya sama dengan:

  for(x=10; x<1; ++x) cout<<x 

Anda menemukan semua angka antara x dan angka yang diberikan.

-1
Jawaban diberikan oleh Aleks. 14 апр. S. 14 April 2018-04-14 21:59 '18 jam 9:59 malam 2018-14-14 21:59

Jika Anda harus menulis fungsi untuk melakukan yang sebaliknya, sintaksnya jauh lebih jelas, belum lagi saya pikir saya belum pernah melihatnya sebelumnya:

  #include <stdio.h> int main() { int x {10}; while (x ++< 20) // x increments to 20 { printf("%d ", x); } } 

Hasil:

11 12 13 14 15 16 17 18 19 20

-1
13 июля '18 в 18:34 2018-07-13 18:34 TrevorLee menjawab 13 Juli '18 pada 18:34 2018-07-13 18:34

Sebenarnya → bukan satu operator. Ini adalah kombinasi dari dua operator yang terpisah - dan>

Mari kita ambil contoh. Sementara (x → 0) Ini adalah satu ekspresi rahasia dengan satu konfirmasi. Di sini, x pertama adalah penurunan dengan nilainya, dan kemudian dibandingkan dengan 0.

-4
06 дек. Balas diberikan oleh Lovekush Vishwakarma 06 Des 2017-12-06 16:45 '17 pada pukul 4:45 sore 2017-12-06 16:45

Pertanyaan lain tentang tag atau Ajukan pertanyaan