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

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

13
เหตุใดฉันจึงไม่ควรรวมไฟล์ cpp และใช้ส่วนหัวแทน
ดังนั้นฉันจึงเสร็จสิ้นการมอบหมายการเขียนโปรแกรม C ++ ครั้งแรกและได้รับเกรดของฉัน including cpp files instead of compiling and linking themแต่ตามการจัดลำดับที่ฉันหายไปเครื่องหมายสำหรับ ฉันไม่ชัดเจนเกินไปในสิ่งที่หมายถึง เมื่อมองกลับไปที่รหัสของฉันฉันเลือกที่จะไม่สร้างไฟล์ส่วนหัวสำหรับชั้นเรียนของฉัน แต่ทำทุกอย่างในไฟล์ cpp (ดูเหมือนว่าจะทำงานได้ดีโดยไม่มีไฟล์ส่วนหัว ... ) ฉันคาดเดาว่านักเรียนระดับประถมหมายความว่าฉันเขียน '#include "mycppfile.cpp";' ในบางไฟล์ของฉัน เหตุผลของฉันสำหรับ#includeการรับไฟล์ cpp คือ: - ทุกสิ่งที่ควรจะเข้าไปในไฟล์ส่วนหัวนั้นอยู่ในไฟล์ cpp ของฉันดังนั้นฉันจึงแกล้งทำเป็นว่าเป็นไฟล์ส่วนหัว - ใน Monkey-see-monkey ทำแฟชั่นฉันเห็นว่าคนอื่น ๆ ไฟล์ส่วนหัวอยู่#includeในไฟล์ดังนั้นฉันจึงทำเช่นเดียวกันกับไฟล์ cpp ของฉัน แล้วฉันทำอะไรผิดและทำไมมันถึงไม่ดี?
147 c++  header-files 

9
เหตุใด C ++ แรนด์ () จึงดูเหมือนว่าจะสร้างเฉพาะลำดับความสำคัญเท่ากันเท่านั้น
ในแอปพลิเคชันขนาดเล็กที่เขียนด้วย C / C ++ ฉันกำลังประสบปัญหากับrandฟังก์ชั่นและอาจเป็นเมล็ด: ฉันต้องการสร้างลำดับของตัวเลขสุ่มที่มีคำสั่งต่างกันเช่นมีค่าลอการิทึมที่แตกต่างกัน (ฐาน 2) แต่ดูเหมือนว่าตัวเลขทั้งหมดที่ผลิตมีคำสั่งเดียวกันโดยมีความผันผวนระหว่าง 2 ^ 25 และ 2 ^ 30 เป็นเพราะrand()เมล็ดมีเวลา Unix ซึ่งตอนนี้เป็นจำนวนค่อนข้างมาก? ฉันลืมอะไร ฉันกำลังเพาะเพียงครั้งเดียวที่จุดเริ่มต้นของrand()main()
146 c++  c  math  random 

10
ความคิดที่อยู่เบื้องหลัง ^ = 32 คืออะไรที่แปลงตัวอักษรตัวพิมพ์เล็กเป็นตัวพิมพ์ใหญ่และในทางกลับกัน?
ฉันกำลังแก้ไขปัญหาบางอย่างใน codeforces โดยปกติฉันตรวจสอบก่อนว่าอักขระเป็นตัวอักษรภาษาอังกฤษตัวบนหรือล่างจากนั้นลบหรือเพิ่ม32เพื่อแปลงเป็นตัวอักษรที่เกี่ยวข้อง แต่ฉันพบว่ามีคนทำ^= 32เพื่อทำสิ่งเดียวกัน นี่มันคือ: char foo = 'a'; foo ^= 32; char bar = 'A'; bar ^= 32; cout << foo << ' ' << bar << '\n'; // foo is A, and bar is a ฉันค้นหาคำอธิบายสำหรับเรื่องนี้แล้วและไม่พบคำตอบ เหตุใดจึงใช้งานได้

19
Beyond Stack Sampling: C ++ Profilers
เรื่องของแฮกเกอร์ วันที่คือ 12/02/10 หลายวันก่อนวันคริสต์มาสกำลังจะหายไปและฉันก็โดนบล็อกถนนสายสำคัญในฐานะโปรแกรมเมอร์หน้าต่าง ฉันใช้ AQTime ฉันพยายามง่วงนอนเป็นประกายและง่วงนอนมากและเมื่อเราพูด VTune กำลังติดตั้ง ฉันได้ลองใช้ตัวสร้างโปรไฟล์ VS2008 และมันก็ถูกลงโทษในทางบวกเช่นกัน ฉันใช้เทคนิคการหยุดชั่วคราวแบบสุ่ม ฉันตรวจสอบต้นไม้ต้นสาย ฉันไล่ออกจากฟังก์ชั่นการติดตาม แต่ข้อเท็จจริงที่เจ็บปวดอันน่าเศร้าของเรื่องนี้ก็คือแอปที่ฉันใช้งานอยู่นั้นมีโค้ดมากกว่าหนึ่งล้านบรรทัดโดยอาจมีแอพของบุคคลที่สามอีกกว่าล้านบรรทัด ฉันต้องการเครื่องมือที่ดีกว่า ฉันอ่านหัวข้ออื่นแล้ว ฉันลองแต่ละโปรไฟล์ที่ระบุไว้ในแต่ละหัวข้อ จะต้องมีสิ่งที่ดีกว่าตัวเลือกขยะและราคาแพงเหล่านี้หรือจำนวนงานที่น่าหัวเราะจนแทบไม่มีกำไร เพื่อให้เกิดความซับซ้อนยิ่งขึ้นรหัสของเรามีการใช้เธรดอย่างหนักและเรียกใช้ลูป Qt Event จำนวนหนึ่งซึ่งบางส่วนมีความเปราะบางจนเกิดความผิดพลาดภายใต้เครื่องมือหนักเนื่องจากความล่าช้าของเวลา อย่าถามฉันว่าเหตุใดเราจึงเรียกใช้ลูปหลายเหตุการณ์ ไม่มีใครสามารถบอกได้ มีตัวเลือกเพิ่มเติมตามแนวของ Valgrind ในสภาพแวดล้อมของ windows หรือไม่? มีอะไรดีไปกว่าเครื่องมือที่ชำรุดอันยาวเหยียดที่ฉันได้ลองไปแล้วหรือไม่? มีอะไรที่ออกแบบมาเพื่อรวมเข้ากับ Qt หรืออาจจะมีการแสดงกิจกรรมที่เป็นประโยชน์ในคิว? รายการทั้งหมดของเครื่องมือที่ฉันลองด้วยเครื่องมือที่มีประโยชน์จริง ๆ ในตัวเอียง: AQTime:ค่อนข้างดี! มีปัญหากับการเรียกซ้ำแบบลึก แต่กราฟการโทรนั้นถูกต้องในกรณีเหล่านี้และสามารถใช้เพื่อกำจัดความสับสนที่คุณอาจมี ไม่ใช่เครื่องมือที่สมบูรณ์แบบ แต่ควรลองใช้ดู มันอาจเหมาะกับความต้องการของคุณและมันก็ดีพอสำหรับฉันเกือบตลอดเวลา หยุดการโจมตีแบบสุ่มชั่วคราวในโหมดดีบั๊ก:มีข้อมูลไม่เพียงพอ เครื่องมือที่ดี แต่ไม่ใช่โซลูชันที่สมบูรณ์ Parallel Studios: ตัวเลือกนิวเคลียร์ …


1
จะเกิดอะไรขึ้นถ้าคุณ static_cast ค่าที่ไม่ถูกต้องใน enum class?
พิจารณารหัส C ++ 11 นี้: enum class Color : char { red = 0x1, yellow = 0x2 } // ... char *data = ReadFile(); Color color = static_cast<Color>(data[0]); สมมติว่าข้อมูล [0] เป็น 100 จริง ๆ สีใดที่ตั้งค่าตามมาตรฐาน? โดยเฉพาะถ้าฉันทำในภายหลัง switch (color) { // ... red and yellow cases omitted default: // handle error …
146 c++  c++11 

19
หลักการตั้งชื่อ - ขีดล่างในตัวแปร C ++ และ C #
เป็นเรื่องปกติที่จะเห็น_varชื่อตัวแปรในฟิลด์คลาส ขีดล่างหมายถึงอะไร มีการอ้างอิงสำหรับอนุสัญญาการตั้งชื่อพิเศษเหล่านี้ทั้งหมดหรือไม่?

8
uint8_t ไม่สามารถพิมพ์ด้วย cout ได้
ฉันมีปัญหาแปลก ๆ เกี่ยวกับการทำงานกับจำนวนเต็มใน C ++ ฉันเขียนโปรแกรมอย่างง่ายที่กำหนดค่าให้กับตัวแปรแล้วพิมพ์มัน แต่มันไม่ทำงานอย่างที่คาดไว้ โปรแกรมของฉันมีโค้ดสองบรรทัดเท่านั้น: uint8_t aa = 5; cout << "value is " << aa << endl; ผลลัพธ์ของโปรแกรมนี้คือ value is คือมันพิมพ์เปล่าaaๆ เมื่อฉันเปลี่ยนuint8_tไปuint16_tโค้ดข้างต้นทำงานเช่นเสน่ห์ ฉันใช้ Ubuntu 12.04 (แม่นยำ Pangolin), 64- บิตและเวอร์ชั่นคอมไพเลอร์ของฉันคือ: gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
146 c++ 

5
iota ของ std :: iota หมายถึงอะไร
ฉันสมมติว่า "i" เพิ่มขึ้นและ "a" ได้รับมอบหมาย แต่ฉันไม่สามารถหาคำตอบได้ มันดูคล้ายกับที่ไม่ได้มาตรฐานitoaซึ่งฉันคิดว่ามันสับสน

6
Const ก่อนหรือ const หลัง?
ในการเริ่มต้นคุณอาจรู้ว่าconstสามารถใช้สร้างข้อมูลของวัตถุหรือตัวชี้ที่ไม่สามารถแก้ไขได้หรือทั้งสองอย่าง const Object* obj; // can't change data Object* const obj; // can't change pointer const Object* const obj; // can't change data or pointer อย่างไรก็ตามคุณยังสามารถใช้ไวยากรณ์: Object const *obj; // same as const Object* obj; สิ่งเดียวที่ดูเหมือนจะสำคัญคือด้านใดของดอกจันที่คุณใส่constคำหลัก โดยส่วนตัวแล้วฉันชอบที่จะใส่constทางด้านซ้ายของประเภทเพื่อระบุว่ามันเป็นข้อมูลที่ไม่สามารถแก้ไขได้เพราะฉันคิดว่ามันอ่านได้ดีกว่าในความคิดจากซ้ายไปขวา แต่ไวยากรณ์ใดมาก่อน ที่สำคัญกว่านั้นคือทำไมมีวิธีการระบุconstข้อมูลที่ถูกต้องสองวิธีและในสถานการณ์ใดที่คุณต้องการหรือต้องการอีกวิธีหนึ่งหากมี แก้ไข: ดังนั้นดูเหมือนว่านี่เป็นการตัดสินใจตามอำเภอใจเมื่อมาตรฐานสำหรับวิธีที่คอมไพเลอร์ควรตีความสิ่งต่าง ๆ ที่ร่างขึ้นมานานก่อนที่ฉันจะเกิด เนื่องจากconstถูกนำไปใช้กับสิ่งที่อยู่ทางซ้ายของคำหลัก (โดยค่าเริ่มต้น) ฉันคิดว่าพวกเขาคิดว่าไม่มีอันตรายใด ๆ ในการเพิ่ม"ทางลัด"เพื่อใช้คำหลักและตัวระบุประเภทในวิธีอื่น ๆ อย่างน้อยก็จนกว่าจะถึงเวลา …
146 c++  c  syntax  const 

4
ความสำคัญของ ios_base :: sync_with_stdio (false); cin.tie (NULL);
ความสำคัญของการรวมคืออะไร ios_base::sync_with_stdio(false); cin.tie(NULL); ในโปรแกรม C ++? ในการทดสอบของฉันมันเร็วขึ้นเวลาดำเนินการ แต่มีกรณีทดสอบที่ฉันควรกังวลเกี่ยวกับการรวมนี้ คำแถลง 2 ต้องอยู่ด้วยกันเสมอหรือเป็นคำแรกที่เพียงพอเช่นเพิกเฉยcin.tie(NULL)? นอกจากนี้ยังอนุญาตให้ใช้คำสั่ง C และ C ++ พร้อมกันได้falseหรือไม่หากค่าถูกตั้งเป็น? https://www.codechef.com/viewsolution/7316085 รหัสข้างต้นทำงานดีจนผมใช้scanf/printfใน C ++ trueโปรแกรมที่มีค่าเป็น ในกรณีนี้มันทำให้เกิดความผิดพลาดในการแบ่งส่วน อะไรคือคำอธิบายที่เป็นไปได้สำหรับสิ่งนี้
146 c++  c 


3
จุดประสงค์ของเครื่องหมายปอนด์ / แฮชเดียว (#) ในบรรทัดของตนเองในตัวประมวลผลล่วงหน้า C / C ++ คืออะไร
ฉันได้ดูซอร์สโค้ดห้องสมุดBoostและฉันสังเกตว่าบ่อยครั้งที่มีสัญญาณปอนด์เดียวโดยไม่มีคำสั่ง preprocessor ติดอยู่ ฉันอ่านคู่มือตัวประมวลผลล่วงหน้าของ GCC และคู่มือข้อกำหนดและไม่พบสิ่งใดเกี่ยวกับเรื่องนี้ (1) #ifndef BOOST_CONFIG_HPP (2) # include <boost/config.hpp> (3) #endif (4) # (5) #if defined(BOOST_HAS_PRAGMA_ONCE) (6) # pragma once (7) #endif ในบรรทัด 4 ไม่มีอะไรหลังจากเครื่องหมายปอนด์ สิ่งนี้มีผลกระทบอะไรบ้าง มันกำหนดไว้ในข้อมูลจำเพาะของ C preprocessor (CPP) หรือไม่ เนื่องจาก Boost เป็นไลบรารีข้ามแพลตฟอร์มฉันจะสมมติว่า CPP ใด ๆ ควรวิเคราะห์อย่างถูกต้อง เอฟเฟกต์ / ผลข้างเคียงของการมีสัญญาณปอนด์ / แฮชแบบสุ่มตลอดรหัสคืออะไร
145 c++  c  boost  c-preprocessor 

5
ทำไม (a% 256) แตกต่างจาก (a & 0xFF)
ฉันมักจะสันนิษฐานว่าเมื่อทำเพิ่มประสิทธิภาพธรรมชาติจะใช้การดำเนินการที่มีประสิทธิภาพค่าที่เหมาะสมเช่นถ้าผมเขียน(a % 256)(a & 0xFF) เมื่อทำการทดสอบกับคอมไพเลอร์ explorer gcc-6.2 (-O3): // Type your code here, or load an example. int mod(int num) { return num % 256; } mod(int): mov edx, edi sar edx, 31 shr edx, 24 lea eax, [rdi+rdx] movzx eax, al sub eax, edx ret และเมื่อลองรหัสอื่น: // Type …
145 c++  optimization 

4
การใช้ตัวแปรสมาชิกในรายการจับแลมบ์ดาภายในฟังก์ชันสมาชิก
โค้ดต่อไปนี้คอมไพล์ด้วย gcc 4.5.1 แต่ไม่ใช่กับ VS2010 SP1: #include <iostream> #include <vector> #include <map> #include <utility> #include <set> #include <algorithm> using namespace std; class puzzle { vector<vector<int>> grid; map<int,set<int>> groups; public: int member_function(); }; int puzzle::member_function() { int i; for_each(groups.cbegin(),groups.cend(),[grid,&i](pair<int,set<int>> group){ i++; cout<<i<<endl; }); } int main() { return 0; } นี่เป็นข้อผิดพลาด: …

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