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

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

12
เหตุใดการใช้ tuples ใน C ++ จึงไม่ธรรมดา
เหตุใดจึงดูเหมือนไม่มีใครใช้ tuples ใน C ++ ทั้งBoost Tuple Libraryหรือไลบรารีมาตรฐานสำหรับ TR1 ฉันอ่านโค้ด C ++ มาเยอะแล้วและไม่ค่อยเห็นการใช้ทูเปิล แต่ฉันมักจะเห็นสถานที่มากมายที่ทูเปิลสามารถแก้ปัญหาต่างๆได้ (โดยปกติจะคืนค่าหลายค่าจากฟังก์ชัน) Tuples ช่วยให้คุณทำสิ่งดีๆได้ทุกประเภทเช่นนี้: tie(a,b) = make_tuple(b,a); //swap a and b ที่ดีกว่านี้อย่างแน่นอน: temp=a; a=b; b=temp; แน่นอนคุณสามารถทำได้เสมอ: swap(a,b); แต่ถ้าคุณต้องการหมุนสามค่าล่ะ? คุณสามารถทำสิ่งนี้ได้ด้วยสิ่งทอ: tie(a,b,c) = make_tuple(b,c,a); Tuples ยังช่วยให้สามารถส่งคืนตัวแปรหลายตัวจากฟังก์ชันได้ง่ายกว่ามากซึ่งอาจเป็นกรณีที่พบได้บ่อยกว่าการแลกเปลี่ยนค่า การใช้การอ้างอิงเพื่อส่งกลับค่าเป็นสิ่งที่ไม่สวยงามอย่างแน่นอน มีข้อบกพร่องใหญ่ ๆ สำหรับสิ่งที่ฉันไม่ได้นึกถึงหรือไม่? ถ้าไม่เป็นเช่นนั้นทำไมพวกเขาจึงไม่ค่อยใช้? ช้ากว่าไหม หรือว่าแค่คนไม่ชิน? เป็นความคิดที่ดีที่จะใช้ tuples หรือไม่?
125 c++  tuples 

2
แลมบ์ดาจับและพารามิเตอร์ที่มีชื่อเดียวกันใครเป็นเงาของอีกฝ่าย? (เสียงดังกับ gcc)
auto foo = "You're using g++!"; auto compiler_detector = [foo](auto foo) { std::puts(foo); }; compiler_detector("You're using clang++!"); เสียงดัง ++ 3.6.0และใหม่กว่าพิมพ์"คุณกำลังใช้เสียงดัง ++!" และเตือนเกี่ยวกับการจับภาพ fooที่ไม่ได้ใช้งาน g ++ 4.9.0และใหม่กว่าพิมพ์"คุณกำลังใช้ g ++!" และเตือนเกี่ยวกับพารามิเตอร์ fooที่ไม่ได้ใช้งาน คอมไพเลอร์ใดที่ทำตามมาตรฐาน C ++ ได้แม่นยำกว่าที่นี่ ตัวอย่าง Wandbox

8
ฉันควรส่งคืน EXIT_SUCCESS หรือ 0 จาก main ()?
เป็นคำถามง่ายๆ แต่ฉันเห็นคำตอบที่ขัดแย้งกันอยู่เรื่อย ๆ : กิจวัตรหลักของโปรแกรม C ++ ควรกลับมา0หรือEXIT_SUCCESSไม่? #include <cstdlib> int main(){return EXIT_SUCCESS;} หรือ int main(){return 0;} เป็นสิ่งเดียวกันหรือไม่? ควรEXIT_SUCCESSใช้กับexit()? ฉันคิดว่าEXIT_SUCCESSน่าจะเป็นตัวเลือกที่ดีกว่าเพราะซอฟต์แวร์อื่น ๆ อาจต้องการให้ศูนย์เป็นความล้มเหลว แต่ฉันก็ได้ยินมาว่าถ้าคุณส่งคืน0คอมไพเลอร์ก็สามารถเปลี่ยนเป็นค่าอื่นได้
125 c++  c  return-value  main 

25
ทำ {…} while (เท็จ)
ฉันกำลังดูรหัสบางอย่างโดยบุคคลและสังเกตเห็นว่าเขาดูเหมือนจะมีรูปแบบในฟังก์ชั่นของเขา: <return-type> function(<params>) { <initialization> do { <main code for function> } while(false); <tidy-up & return> } มันไม่เลวแปลกกว่านั้น (รหัสจริงค่อนข้างเรียบร้อยและไม่น่าแปลกใจ) ไม่ใช่สิ่งที่ฉันเคยเห็นมาก่อนและฉันสงสัยว่ามีใครสามารถคิดตรรกะเบื้องหลังมันได้หรือไม่ - อาจมีพื้นหลังเป็นภาษาอื่น?
125 c++ 

6
แลมด้ากลับมาเอง: ถูกกฎหมายหรือไม่?
พิจารณาโปรแกรมที่ไร้ประโยชน์นี้: #include <iostream> int main(int argc, char* argv[]) { int a = 5; auto it = [&](auto self) { return [&](auto b) { std::cout << (a + b) << std::endl; return self(self); }; }; it(it)(4)(6)(42)(77)(999); } โดยพื้นฐานแล้วเราพยายามสร้างแลมด้าที่คืนค่าตัวเอง MSVC รวบรวมโปรแกรมและทำงาน gcc รวบรวมโปรแกรมและ segfaults เสียงดังปฏิเสธโปรแกรมด้วยข้อความ: error: function 'operator()<(lambda at lam.cpp:6:13)>' with deduced …

13
วิธีที่ง่ายที่สุดในการพลิกค่าบูลีน
ฉันแค่ต้องการพลิกบูลีนตามสิ่งที่มีอยู่แล้ว ถ้าเป็นจริง - ทำให้เป็นเท็จ หากเป็นเท็จ - ทำให้เป็นจริง นี่คือรหัสที่ตัดตอนมาของฉัน: switch(wParam) { case VK_F11: if (flipVal == true) { flipVal = false; } else { flipVal = true; } break; case VK_F12: if (otherVal == true) { otherValVal = false; } else { otherVal = true; } break; default: break; }
125 c++  c  boolean  boolean-logic 

3
ตัวแปรอินไลน์ทำงานอย่างไร?
ในการประชุมมาตรฐาน Oulu ISO C ++ 2016 ข้อเสนอที่เรียกว่าInline Variablesได้รับการโหวตให้เป็น C ++ 17 โดยคณะกรรมการมาตรฐาน ในแง่ของคนธรรมดาตัวแปรอินไลน์คืออะไรทำงานอย่างไรและมีประโยชน์อะไร ควรประกาศกำหนดและใช้ตัวแปรอินไลน์อย่างไร?
124 c++  c++17 


7
ข้อผิดพลาด“ X ไม่ตั้งชื่อประเภท” ใน C ++
ฉันมีสองคลาสที่ประกาศดังนี้: class User { public: MyMessageBox dataMsgBox; }; class MyMessageBox { public: void sendMessage(Message *msg, User *recvr); Message receiveMessage(); vector<Message> *dataMessageList; }; เมื่อฉันพยายามรวบรวมโดยใช้ gcc มันให้ข้อผิดพลาดต่อไปนี้: MyMessageBox ไม่ได้ตั้งชื่อประเภท
124 c++  windows  types 

11
เป็นไปได้หรือไม่ที่จะตั้งโปรแกรม iPhone ใน C ++
ฉันทุกคนมีความหลากหลายทางภาษา แต่ Objective C นั้นบ้า ดังนั้นฉันจึงอยากรู้: เป็นไปได้ไหมที่จะเขียนโค้ดแอพ iPhone ด้วย C ++ ในขณะที่ใช้ Cocoa API ฯลฯ
124 c++  iphone  objective-c 

3
1.0 เป็นเอาต์พุตที่ถูกต้องจาก std :: create_canonical หรือไม่
ฉันคิดเสมอว่าตัวเลขสุ่มจะอยู่ระหว่างศูนย์และหนึ่งโดยที่ไม่ใช่1ตัวเลขจากช่วงครึ่งเปิด [0,1) documention บน cppreference.comของstd::generate_canonicalยืนยันนี้ อย่างไรก็ตามเมื่อฉันเรียกใช้โปรแกรมต่อไปนี้: #include <iostream> #include <limits> #include <random> int main() { std::mt19937 rng; std::seed_seq sequence{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; rng.seed(sequence); rng.discard(12 * 629143 + 6); float random = std::generate_canonical<float, std::numeric_limits<float>::digits>(rng); if (random == 1.0f) { std::cout << "Bug!\n"; } return 0; …
124 c++  c++11  random 

17
คำถามที่ 5.1.1: แอปพลิเคชันไม่สามารถเริ่มทำงานได้เนื่องจากปลั๊กอินแพลตฟอร์ม“ windows” ขาดหายไป
แก้ไข: บางคนเริ่มทำเครื่องหมายคำถามของฉันว่าซ้ำกัน อย่าลืมว่ามีคำถามที่คล้ายกันมากมายเมื่อฉันถามคำถามนี้ (ดูรายการด้านล่าง) อย่างไรก็ตามคำตอบเหล่านี้ไม่สามารถแก้ปัญหาของฉันได้ หลังจากค้นหามานานฉันพบความคิดเห็นที่ผู้ใช้ทุกคนเพิกเฉยที่ชี้ไปที่ lib ที่หายไป หลายเดือนต่อมาความคิดเห็นถูกเปลี่ยนเป็นคำตอบ อย่างไรก็ตามเมื่อฉันตอบคำถามนี้ด้วยตัวเองฉันตั้งใจจะช่วยคนอื่นโดยการให้คำตอบโดยตรง สิ่งนี้ไม่ควรลืมและจนถึงตอนนี้คำตอบของฉันก็ช่วยผู้คนมากมาย ดังนั้นคำถามของฉันจะไม่ซ้ำกันอย่างแน่นอน โดยวิธีการ: คำตอบที่ได้รับการยอมรับในลิงก์ที่ให้ไว้ด้านบนไม่สามารถแก้ปัญหาได้ ! ใช่ฉันใช้การค้นหา: ไม่สามารถโหลดปลั๊กอินแพลตฟอร์ม "windows" แพลตฟอร์มที่ใช้งานได้คือ: ข้อผิดพลาด การปรับใช้แอปพลิเคชัน Qt C ++ จากข้อผิดพลาด Visual Studio qwindows.dll ล้มเหลวในการโหลดปลั๊กอินแพลตฟอร์ม "windows" แพลตฟอร์มที่ใช้ได้คือ windows น้อยที่สุด อย่างไรก็ตามในกรณีของฉันปัญหายังคงมีอยู่ ฉันใช้ Qt 5.1.1 กับ Visual Studio 2012 และพัฒนาแอปพลิเคชันของฉันบน Windows 7 ด้วย Qt Creator 2.8.1 แอปพลิเคชันถูกรวบรวมในโหมด "Release" …

14
Double Negation ใน C ++
ฉันเพิ่งเข้ามาในโครงการที่มีฐานรหัสขนาดใหญ่มาก ฉันจัดการกับ C ++ เป็นส่วนใหญ่และโค้ดจำนวนมากที่พวกเขาเขียนใช้การปฏิเสธสองครั้งสำหรับตรรกะบูลีน if (!!variable && (!!api.lookup("some-string"))) { do_some_stuff(); } ฉันรู้ว่าคนเหล่านี้เป็นโปรแกรมเมอร์อัจฉริยะเห็นได้ชัดว่าพวกเขาไม่ได้ทำสิ่งนี้โดยบังเอิญ ฉันไม่ใช่ผู้เชี่ยวชาญ C ++ ที่ช่ำชองการเดาเพียงอย่างเดียวของฉันว่าทำไมพวกเขาถึงทำเช่นนี้ก็คือพวกเขาต้องการทำให้เป็นบวกอย่างแน่นอนว่าค่าที่ประเมินคือการแสดงบูลีนที่แท้จริง ดังนั้นพวกเขาจึงลบล้างมันแล้วลบมันอีกครั้งเพื่อให้มันกลับมาเป็นค่าบูลีนที่แท้จริง ถูกต้องหรือฉันพลาดอะไรไป?
124 c++  boolean 


2
c ++ 11 lambdas จับตัวแปรที่ไม่ได้ใช้หรือไม่
เมื่อฉันใช้[=]เพื่อบ่งชี้ว่าผมอยากตัวแปรท้องถิ่นทั้งหมดจะถูกจับโดยค่าในแลมบ์ดาจะส่งผลให้ทุกตัวแปรท้องถิ่นในฟังก์ชั่นการคัดลอกหรือเพียงแค่ทุกตัวแปรท้องถิ่นที่ใช้โดยแลมบ์ดา ? ตัวอย่างเช่นถ้าฉันมี: vector<int> my_huge_vector(100000); int my_measly_int; some_function([=](int i){ return my_measly_int + i; }); my_huge_vector จะถูกคัดลอกหรือไม่แม้ว่าฉันจะไม่ได้ใช้ในแลมบ์ดา
124 c++  lambda  c++11 

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