คำถามติดแท็ก c++

C ++ เป็นภาษาโปรแกรมทั่วไป เดิมได้รับการออกแบบให้เป็นส่วนขยายของ C และมีไวยากรณ์ที่คล้ายกัน แต่ตอนนี้มันเป็นภาษาที่แตกต่างอย่างสิ้นเชิง ใช้แท็กนี้สำหรับคำถามเกี่ยวกับรหัส (จะ) คอมไพล์ด้วยคอมไพเลอร์ C ++ ใช้แท็กเฉพาะรุ่นสำหรับคำถามที่เกี่ยวข้องกับการแก้ไขมาตรฐานเฉพาะ [C ++ 11], [C ++ 14], [C ++ 17] หรือ [C ++ 20] เป็นต้น

9
ฟังก์ชัน pthread จากคลาส
สมมติว่าฉันมีคลาสเช่น class c { // ... void *print(void *){ cout << "Hello"; } } แล้วผมก็มีเวกเตอร์ของ c vector<c> classes; pthread_t t1; classes.push_back(c()); classes.push_back(c()); ตอนนี้ฉันต้องการสร้างเธรดบน c.print(); และสิ่งต่อไปนี้ทำให้ฉันมีปัญหาด้านล่าง: pthread_create(&t1, NULL, &c[0].print, NULL); ข้อผิดพลาด Ouput: ไม่สามารถแปลง 'void * (tree_item ::) (void )' เป็น 'void * ( ) (void )' สำหรับอาร์กิวเมนต์ '3' ถึง 'int pthread_create …
86 c++  pthreads 

7
เหตุใดแอป Android จึงไม่ควรเขียนด้วยภาษา C / C ++ เพราะคุณ "เพียงแค่ต้องการเขียนโปรแกรมใน C / C ++" [ปิด]
ปิด . คำถามนี้เป็นคำถามความคิดเห็นตาม ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบได้ด้วยข้อเท็จจริงและการอ้างอิงโดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา ปรับปรุงคำถามนี้ อัปเดตแล้ว (เพื่อความชัดเจนและลดความคลุมเครือ): ฉันจะเริ่มซ่อมแซมแอพ Android ฉันวางแผนที่จะเขียนใน C ++ โดยใช้ NDK (เนื่องจากฉันมีประสบการณ์มากขึ้นใน C ++ และชอบใช้กับ Java) แต่เจอสิ่งต่อไปนี้ในหน้าAndroid NDK : คุณควรใช้ NDK เฉพาะในกรณีที่จำเป็นต่อแอปของคุณเท่านั้น - ไม่ควรใช้เพราะคุณต้องการเขียนโปรแกรมใน C / C ++ ฉันรู้สึกว่าคุณควรใช้ภาษาที่คุณต้องการตราบเท่าที่มันเหมาะกับงาน ใครสามารถอธิบายได้ว่าทำไมจึงไม่แนะนำอย่างยิ่งที่จะไม่ใช้ C / C ++ สำหรับการพัฒนา Android? ต้นฉบับ: ฉันจะเริ่มซ่อมแซมแอพมือถือโดยเฉพาะ Android ซึ่งเป็นระบบปฏิบัติการของโทรศัพท์ปัจจุบันของฉันและฉันสงสัยว่าการเขียนแอปใน C ++ (หรืออย่างน้อยก็เป็นแกนหลักจากนั้นการรวมใน …
86 java  android  c++ 

4
ทำไมเราถึงเรียก cin.clear () และ cin.ignore () หลังจากอ่านอินพุต
บทแนะนำ C ++ ของ Google Code Universityเคยมีรหัสนี้: // Description: Illustrate the use of cin to get input // and how to recover from errors. #include <iostream> using namespace std; int main() { int input_var = 0; // Enter the do while loop and stay there until either // a non-numeric …
86 c++  input  iostream  cin 

29
'ทำ ... ในขณะที่' กับ 'ในขณะที่'
รายการที่ซ้ำกันที่เป็นไปได้: While กับ Do While เมื่อใดฉันควรใช้ do-while แทน while ลูป ฉันเขียนโปรแกรมมาระยะหนึ่งแล้ว (ทำงาน 2 ปี + ปริญญา 4.5 ปี + เตรียมอุดมศึกษา 1 ปี) และฉันไม่เคยใช้ลูป do-while ที่ไม่ถูกบังคับให้เรียนในหลักสูตร Introduction to Programming ฉันมีความรู้สึกมากขึ้นเรื่อย ๆ ว่าฉันเขียนโปรแกรมผิดถ้าฉันไม่เคยเจออะไรที่เป็นพื้นฐาน เป็นไปได้ไหมที่ฉันไม่ได้เผชิญกับสถานการณ์ที่ถูกต้อง? มีตัวอย่างอะไรบ้างที่จำเป็นต้องใช้ do-while แทน a while (การเรียนของฉันเกือบทั้งหมดเป็นภาษา C / C ++ และงานของฉันอยู่ในภาษา C # ดังนั้นหากมีภาษาอื่นที่เหมาะสมอย่างยิ่งเพราะ do-whiles ทำงานแตกต่างกันคำถามเหล่านี้ก็ใช้ไม่ได้จริงๆ) เพื่อชี้แจง ... …
86 c#  c++  c  while-loop  do-while 

3
การรีเซ็ตสตรีมสตริง
ฉันจะ "รีเซ็ต" สถานะของสตรีมสตริงให้เป็นแบบเดิมเมื่อสร้างได้อย่างไร int firstValue = 1; int secondValue = 2; std::wstringstream ss; ss << "Hello: " << firstValue; std::wstring firstText(ss.str()); //print the value of firstText here //How do I "reset" the stringstream here? //I would like it behave as if I had created // stringstream ss2 and used it …

6
ผันผวนและเปลี่ยนแปลงได้ใน C ++
ฉันมีคำถามเกี่ยวกับความแตกต่างระหว่างความผันผวนและความผันแปร ฉันสังเกตว่าทั้งสองอย่างนั้นหมายความว่ามันสามารถเปลี่ยนแปลงได้ อะไรอีก? พวกเดียวกันหรือเปล่า? อะไรคือความแตกต่าง? ใช้ได้ที่ไหน? เหตุใดจึงเสนอแนวคิดทั้งสองนี้ วิธีการใช้งานที่แตกต่างกัน? ขอบคุณมาก.
86 c++  volatile  mutable 

12
คัดลอกค่าแผนที่เป็นเวกเตอร์ใน STL
กำลังดำเนินการผ่านทาง STL ที่มีประสิทธิภาพในขณะนี้ รายการที่ 5 แนะนำว่าโดยปกติแล้วควรใช้ฟังก์ชัน range member กับคู่ขององค์ประกอบเดียว ขณะนี้ฉันต้องการคัดลอกค่าทั้งหมดในแผนที่ (เช่น - ฉันไม่ต้องการกุญแจ) ไปยังเวกเตอร์ วิธีที่สะอาดที่สุดในการทำเช่นนี้คืออะไร?
86 c++  stl  containers 

8
การ จำกัด การแปลงใน C ++ 0x มันเป็นแค่ตัวฉันเองหรือนี่ฟังดูเหมือนเป็นการเปลี่ยนแปลงอย่างสิ้นเชิง?
C ++ 0x จะสร้างโค้ดต่อไปนี้และโค้ดที่คล้ายกันมีรูปแบบไม่ถูกต้องเนื่องจากต้องมีการแปลงที่เรียกว่าการแปลง a doubleเป็นint. int a[] = { 1.0 }; ฉันสงสัยว่าการเริ่มต้นประเภทนี้ใช้มากในรหัสโลกแห่งความเป็นจริงหรือไม่ การเปลี่ยนแปลงนี้จะเสียรหัสกี่รหัส การแก้ไขในโค้ดของคุณมีความพยายามมากหรือไม่หากโค้ดของคุณได้รับผลกระทบเลย สำหรับการอ้างอิงโปรดดูที่ 8.5.4 / 6 ของ n3225 Conversion ที่แคบลงคือการแปลงโดยปริยาย จากประเภททศนิยมไปยังประเภทจำนวนเต็มหรือ จาก long double ไปเป็น double หรือ float หรือจาก double ไปจนถึง float ยกเว้นที่มาคือนิพจน์คงที่และมูลค่าที่แท้จริงหลังการแปลงอยู่ในช่วงของค่าที่สามารถแสดงได้ (แม้ว่าจะไม่สามารถแสดงได้อย่างแน่นอน) หรือ จากประเภทจำนวนเต็มหรือประเภทการแจงนับที่ไม่ได้กำหนดขอบเขตเป็นประเภทจุด oating ยกเว้นที่มาเป็นนิพจน์คงที่และมูลค่าที่แท้จริงหลังจากการแปลงจะพอดีกับประเภทเป้าหมายและจะให้ค่าเดิมเมื่อแปลงกลับเป็นประเภทเดิมหรือ จากประเภทจำนวนเต็มหรือประเภทการแจงนับที่ไม่ได้กำหนดขอบเขตไปเป็นประเภทจำนวนเต็มที่ไม่สามารถแสดงค่าทั้งหมดของประเภทเดิมได้ยกเว้นที่มาเป็นนิพจน์คงที่และมูลค่าจริงหลังจากการแปลงจะพอดีกับประเภทเป้าหมายและจะสร้างค่าดั้งเดิมเมื่อ แปลงกลับเป็นประเภทเดิม

7
จะส่งเวกเตอร์ไปยังฟังก์ชันได้อย่างไร?
ฉันกำลังพยายามส่งเวกเตอร์เป็นอาร์กิวเมนต์ให้กับฟังก์ชันและฉันคิดไม่ออกว่าจะทำให้มันทำงานอย่างไร พยายามหลายวิธี แต่ทั้งหมดให้ข้อความแสดงข้อผิดพลาดที่แตกต่างกัน ฉันใส่โค้ดเพียงบางส่วนเท่านั้นเนื่องจากเป็นเพียงส่วนนี้ที่ใช้ไม่ได้ (เวกเตอร์ "สุ่ม" เต็มไปด้วยการสุ่ม แต่เรียงลำดับค่าระหว่าง 0 ถึง 200) อัปเดตรหัส: #include <iostream> #include <ctime> #include <algorithm> #include <vector> using namespace std; int binarySearch(int first, int last, int search4, vector<int>& random); int main() { vector<int> random(100); int search4, found; int first = 0; int last = 99; found = …
86 c++  function  vector 

13
คีย์เวิร์ดที่ลบเลือน C ++ แนะนำรั้วหน่วยความจำหรือไม่
ฉันเข้าใจว่าvolatileแจ้งให้คอมไพเลอร์ทราบว่าค่าอาจมีการเปลี่ยนแปลง แต่เพื่อให้ฟังก์ชันนี้สำเร็จคอมไพเลอร์จำเป็นต้องแนะนำรั้วหน่วยความจำเพื่อให้ใช้งานได้หรือไม่ จากความเข้าใจของฉันลำดับของการดำเนินการกับวัตถุระเหยไม่สามารถจัดเรียงใหม่ได้และต้องรักษาไว้ สิ่งนี้ดูเหมือนจะบ่งบอกถึงความทรงจำบางอย่างที่จำเป็นและไม่มีทางแก้ไขได้ ฉันพูดถูกต้องหรือเปล่า มีการอภิปรายที่น่าสนใจสำหรับคำถามที่เกี่ยวข้องนี้ Jonathan Wakely เขียน : ... การเข้าถึงตัวแปรระเหยที่แตกต่างกันไม่สามารถจัดลำดับใหม่โดยคอมไพเลอร์ได้ตราบเท่าที่เกิดขึ้นในนิพจน์เต็มแยกต่างหาก ... ใช่ว่าการระเหยนั้นไร้ประโยชน์สำหรับความปลอดภัยของเธรด แต่ไม่ใช่ด้วยเหตุผลที่เขาให้ ไม่ใช่เพราะคอมไพเลอร์อาจจัดลำดับการเข้าถึงวัตถุที่ระเหยได้ แต่เป็นเพราะ CPU อาจเรียงลำดับใหม่ การดำเนินการของอะตอมและอุปสรรคของหน่วยความจำป้องกันไม่ให้คอมไพเลอร์และ CPU จัดลำดับใหม่ ซึ่งDavid Schwartzตอบกลับในความคิดเห็น : ... ไม่มีความแตกต่างจากมุมมองของมาตรฐาน C ++ ระหว่างคอมไพเลอร์กำลังทำอะไรบางอย่างกับคอมไพเลอร์ส่งคำสั่งที่ทำให้ฮาร์ดแวร์ทำบางอย่าง หากซีพียูอาจจัดลำดับการเข้าถึงใหม่ไปยัง volatiles มาตรฐานก็ไม่จำเป็นต้องรักษาลำดับของมันไว้ ... ... มาตรฐาน C ++ ไม่ได้สร้างความแตกต่างเกี่ยวกับสิ่งที่จัดลำดับใหม่ และคุณไม่สามารถโต้แย้งได้ว่า CPU สามารถเรียงลำดับใหม่ได้โดยไม่มีเอฟเฟกต์ที่สังเกตเห็นได้ดังนั้นจึงไม่เป็นไร - มาตรฐาน C ++ กำหนดลำดับของมันให้สังเกตได้ คอมไพเลอร์เป็นไปตามมาตรฐาน C ++ …

5
ฉันจะจัดการกับ mutexes ในประเภทที่เคลื่อนย้ายได้ใน C ++ อย่างไร?
ตามการออกแบบstd::mutexไม่สามารถเคลื่อนย้ายหรือคัดลอกได้ ซึ่งหมายความว่าคลาสที่Aถือ mutex จะไม่ได้รับตัวสร้างการย้ายเริ่มต้น ฉันจะทำให้ประเภทนี้Aเคลื่อนย้ายได้ด้วยวิธีที่ปลอดภัยต่อเธรดได้อย่างไร


13
เป็นไปได้หรือไม่ที่จะกำหนดจำนวนองค์ประกอบของคลาส c ++ enum
เป็นไปได้หรือไม่ที่จะกำหนดจำนวนสมาชิกของ c ++ enum class : enum class Example { A, B, C, D, E }; ฉันพยายามที่จะใช้ sizeofอย่างไรก็ตามมันส่งคืนขนาดขององค์ประกอบ enum sizeof(Example); // Returns 4 (on my architecture) มีวิธีมาตรฐานในการรับคาร์ดินาลลิตี้ (5 ในตัวอย่างของฉัน) หรือไม่

6
จะตรวจสอบได้อย่างไรว่าเธรด std :: ยังทำงานอยู่หรือไม่
ฉันจะตรวจสอบได้อย่างไรว่า a std::threadยังทำงานอยู่ (ในรูปแบบที่ไม่ขึ้นกับแพลตฟอร์ม) มันขาดtimed_join()วิธีการและjoinable()ไม่มีความหมายสำหรับสิ่งนั้น ฉันคิดว่าจะล็อค mutex ด้วยstd::lock_guardเธรดและใช้try_lock()วิธีการของ mutex เพื่อตรวจสอบว่ามันยังคงถูกล็อกอยู่หรือไม่ (เธรดกำลังทำงานอยู่) แต่ดูเหมือนว่าฉันจะซับซ้อนโดยไม่จำเป็น คุณรู้วิธีที่หรูหรากว่านี้หรือไม่? อัปเดต:เพื่อความชัดเจน: ฉันต้องการตรวจสอบว่าเธรดออกอย่างสมบูรณ์หรือไม่ ถือว่าด้าย 'ห้อย' ทำงานเพื่อจุดประสงค์นี้

4
เหตุใดจึงสามารถส่ง T * ในการลงทะเบียน แต่ unique_ptr <T> ไม่สามารถทำได้?
ฉันกำลังดูการสนทนาของ Chandler Carruth ใน CppCon 2019: ไม่มี Abstractions Zero-Cost ในนั้นเขาให้ตัวอย่างของวิธีการที่เขารู้สึกประหลาดใจเพียงเท่าใดค่าใช้จ่ายที่คุณเกิดขึ้นโดยใช้std::unique_ptr&lt;int&gt;มากกว่าint*; ส่วนนั้นเริ่มต้นที่เวลา 17:25 น คุณสามารถดูผลการรวบรวมตัวอย่างของคู่ของเขา (godbolt.org) - เพื่อเป็นพยานว่าที่จริงดูเหมือนว่าคอมไพเลอร์ไม่เต็มใจที่จะผ่านค่า unique_ptr - ซึ่งในความเป็นจริงในบรรทัดล่างคือ เพียงที่อยู่ - ภายในการลงทะเบียนเท่านั้นในหน่วยความจำแบบตรง หนึ่งในประเด็นที่นายคาร์รั ธ ทำเวลาประมาณ 27:00 น. คือ C ++ ABI ต้องการพารามิเตอร์ตามค่า (บางส่วน แต่ไม่ใช่ทั้งหมดบางทีอาจเป็น - ประเภทที่ไม่ใช่แบบดั้งเดิมหรือไม่ใช่ประเภทที่ไม่สามารถแก้ไขได้) จะถูกส่งผ่านในหน่วยความจำ มากกว่าภายในทะเบียน คำถามของฉัน: นี่เป็นข้อกำหนดของ ABI ในบางแพลตฟอร์มหรือไม่ (อันไหน) หรือบางทีมันอาจเป็นเพียงการมองโลกในแง่ร้ายในบางสถานการณ์? เหตุใด ABI จึงเป็นเช่นนั้น นั่นคือถ้าเขตข้อมูลของโครงสร้าง / …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.