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

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

6
(A + B + C) ≠ (A + C + B) และการเรียงลำดับคอมไพเลอร์
การเพิ่มจำนวนเต็ม 32 บิตสองตัวอาจทำให้จำนวนเต็มล้น: uint64_t u64_z = u32_x + u32_y; การโอเวอร์โฟลว์นี้สามารถหลีกเลี่ยงได้หากหนึ่งในจำนวนเต็ม 32 บิตถูกแคสต์หรือเพิ่มเป็นจำนวนเต็ม 64 บิตก่อน uint64_t u64_z = u32_x + u64_a + u32_y; อย่างไรก็ตามหากคอมไพเลอร์ตัดสินใจที่จะจัดลำดับการเพิ่มใหม่: uint64_t u64_z = u32_x + u32_y + u64_a; การล้นจำนวนเต็มอาจยังคงเกิดขึ้น คอมไพเลอร์ได้รับอนุญาตให้ทำการเรียงลำดับใหม่หรือเราสามารถไว้วางใจให้คอมไพเลอร์สังเกตเห็นความไม่สอดคล้องกันของผลลัพธ์และรักษาลำดับนิพจน์ตามที่เป็นอยู่ได้หรือไม่?

6
อะไรทำให้การใช้พอยน์เตอร์นี้ไม่สามารถคาดเดาได้?
ขณะนี้ฉันกำลังเรียนรู้คำแนะนำและอาจารย์ของฉันให้ตัวอย่างโค้ดชิ้นนี้: //We cannot predict the behavior of this program! #include <iostream> using namespace std; int main() { char * s = "My String"; char s2[] = {'a', 'b', 'c', '\0'}; cout << s2 << endl; return 0; } เขาเขียนในความคิดเห็นว่าเราไม่สามารถคาดเดาพฤติกรรมของโปรแกรมได้ อะไรทำให้คาดเดาไม่ได้กันแน่? ฉันไม่เห็นอะไรผิดปกติกับมัน
108 c++  pointers 

6
เหตุใดจึงส่งคืน 'เวกเตอร์' จากฟังก์ชันได้
โปรดพิจารณารหัสนี้ ฉันเคยเห็นรหัสประเภทนี้หลายครั้ง wordsเป็นเวกเตอร์ท้องถิ่น เป็นไปได้อย่างไรที่จะส่งคืนจากฟังก์ชัน เรารับประกันได้ไหมว่ามันจะไม่ตาย? std::vector<std::string> read_file(const std::string& path) { std::ifstream file("E:\\names.txt"); if (!file.is_open()) { std::cerr << "Unable to open file" << "\n"; std::exit(-1); } std::vector<string> words;//this vector will be returned std::string token; while (std::getline(file, token, ',')) { words.push_back(token); } return words; }

11
ข้อผิดพลาดในการคอมไพล์ GCC ด้วยรหัส> 2 GB
ฉันมีฟังก์ชั่นจำนวนมากรวมประมาณ 2.8 GB ของรหัสวัตถุ (น่าเสียดายที่ไม่มีวิธีการคำนวณทางวิทยาศาสตร์ ... ) เมื่อฉันพยายามที่จะเชื่อมโยงพวกเขาก็จะได้รับ (คาดว่า) relocation truncated to fit: R_X86_64_32Sข้อผิดพลาดที่ผมหวังว่าจะหลีกเลี่ยงโดย specifing -mcmodel=mediumธงคอมไพเลอร์ ไลบรารีทั้งหมดที่เชื่อมโยงนอกเหนือจากที่ฉันควบคุมจะถูกคอมไพล์ด้วย-fpicแฟล็ก ถึงกระนั้นข้อผิดพลาดยังคงมีอยู่และฉันคิดว่าบางไลบรารีที่ฉันเชื่อมโยงไม่ได้คอมไพล์ด้วย PIC นี่คือข้อผิดพลาด: /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o: In function `_start': (.text+0x12): relocation truncated to fit: R_X86_64_32S against symbol `__libc_csu_fini' defined in .text section in /usr/lib64/libc_nonshared.a(elf-init.oS) /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o: In function `_start': (.text+0x19): relocation truncated to fit: R_X86_64_32S against …
108 c++  c  gcc  compiler-errors 

2
เติมโค้ดได้เร็วขึ้นด้วยเสียงดังกริ๊ก
ฉันกำลังตรวจสอบการเร่งการเติมโค้ดที่เป็นไปได้ในขณะที่ใช้กลไกการเติมโค้ดของ clang ขั้นตอนที่อธิบายด้านล่างคือสิ่งที่ฉันพบในrtagsโดย Anders Bakken หน่วยการแปลถูกแยกวิเคราะห์โดยไฟล์การมอนิเตอร์ daemon สำหรับการเปลี่ยนแปลง สิ่งนี้ทำได้โดยเรียกclang_parseTranslationUnitและฟังก์ชันที่เกี่ยวข้อง ( reparse*, dispose*) clang_codeCompleteAtเมื่อผู้ใช้ร้องขอเสร็จสิ้นในเส้นที่กำหนดและคอลัมน์ในแฟ้มแหล่งที่มาที่ภูตผ่านการแปลหน่วยที่เก็บไว้สำหรับรุ่นที่บันทึกไว้ล่าสุดของแฟ้มแหล่งที่มาและแฟ้มแหล่งที่มาปัจจุบัน ( เอกสาร Clang CodeComplete ) ธงที่ส่งผ่านไปclang_parseTranslationUnit(จากCompletionThread :: กระบวนการสาย 271 ) CXTranslationUnit_PrecompiledPreamble|CXTranslationUnit_CacheCompletionResults|CXTranslationUnit_SkipFunctionBodesเป็น ธงที่ส่งผ่านไปclang_codeCompleteAt(จากCompletionThread :: กระบวนการสาย 305 ) CXCodeComplete_IncludeMacros|CXCodeComplete_IncludeCodePatternsเป็น เรียกร้องให้clang_codeCompleteAtช้ามาก - มันจะใช้เวลาประมาณ 3-5 clang_codeCompleteAtวินาทีเพื่อให้ได้เสร็จสิ้นแม้ในกรณีที่สถานที่ตั้งเสร็จสิ้นเป็นรหัสการเข้าถึงสมาชิกที่ถูกต้องเป็นส่วนหนึ่งของกรณีการใช้งานตั้งใจที่กล่าวถึงในเอกสารของ ดูเหมือนว่าวิธีนี้จะช้าเกินไปตามมาตรฐานการเติมรหัส IDE มีวิธีเร่งความเร็วนี้หรือไม่?

8
BLAS มีประสิทธิภาพสูงสุดได้อย่างไร?
ด้วยความอยากรู้อยากเห็นฉันตัดสินใจที่จะเปรียบเทียบฟังก์ชันการคูณเมทริกซ์ของฉันเองเทียบกับการใช้งาน BLAS ... ฉันต้องบอกว่าอย่างน้อยก็ประหลาดใจกับผลลัพธ์: การปรับใช้แบบกำหนดเองการทดลอง 10 ครั้งของการคูณเมทริกซ์ 1000x1000: Took: 15.76542 seconds. การใช้งาน BLAS การทดลอง 10 ครั้งของการคูณเมทริกซ์ 1000x1000: Took: 1.32432 seconds. นี่คือการใช้ตัวเลขทศนิยมตำแหน่งเดียวที่มีความแม่นยำสูง การใช้งานของฉัน: template<class ValT> void mmult(const ValT* A, int ADim1, int ADim2, const ValT* B, int BDim1, int BDim2, ValT* C) { if ( ADim2!=BDim1 ) throw std::runtime_error("Error sizes off"); …
108 c++  fortran 

3
'size_t' เทียบกับ 'คอนเทนเนอร์ :: size_type'
มีความแตกต่างระหว่างsize_tและcontainer::size_typeหรือไม่? สิ่งที่ฉันเข้าใจคือsize_tทั่วไปกว่าและสามารถใช้กับsize_types ใดก็ได้ แต่container::size_typeเหมาะสำหรับคอนเทนเนอร์บางประเภทหรือไม่?

4
ลำดับการดำเนินการ C ++ ในวิธีการผูกมัด
ผลลัพธ์ของโปรแกรมนี้: #include <iostream> class c1 { public: c1& meth1(int* ar) { std::cout << "method 1" << std::endl; *ar = 1; return *this; } void meth2(int ar) { std::cout << "method 2:"<< ar << std::endl; } }; int main() { c1 c; int nu = 0; c.meth1(&nu).meth2(nu); } คือ: method 1 …

17
สัญลักษณ์ภายนอกที่ไม่ได้รับการแก้ไข __imp__fprintf และ __imp____iob_func, SDL2
ใครช่วยอธิบายว่าไฟล์ __imp__fprintf และ __imp____iob_func วิธีการภายนอกที่ไม่ได้รับการแก้ไข? เพราะฉันได้รับข้อผิดพลาดเหล่านี้เมื่อฉันพยายามรวบรวม: 1>SDL2main.lib(SDL_windows_main.obj) : error LNK2019: unresolved external symbol __imp__fprintf referenced in function _ShowError 1>SDL2main.lib(SDL_windows_main.obj) : error LNK2019: unresolved external symbol __imp____iob_func referenced in function _ShowError 1>E:\Documents\Visual Studio 2015\Projects\SDL2_Test\Debug\SDL2_Test.exe : fatal error LNK1120: 2 unresolved externals ฉันสามารถพูดได้แล้วว่าปัญหาไม่ได้มาจากการเชื่อมโยงผิด ฉันเชื่อมโยงทุกอย่างถูกต้องแล้ว แต่ด้วยเหตุผลบางอย่างมันไม่สามารถรวบรวมได้ ฉันกำลังพยายามใช้ SDL2 ฉันใช้ Visual Studio 2015 เป็นคอมไพเลอร์ …

10
วิธีการเริ่มต้นแผนที่ const คงที่ส่วนตัวใน C ++?
ฉันต้องการเพียงแค่พจนานุกรมหรืออาเรย์=>stringint มีประเภทแผนที่ C ++ สำหรับกรณีนี้ แต่ฉันต้องการอินสแตนซ์สำหรับแผนที่เดียวเท่านั้น (-> คงที่) และแผนที่นี้ไม่สามารถเปลี่ยนแปลงได้ (-> const); ฉันพบวิธีนี้แล้วกับไลบรารีที่เพิ่มขึ้น std::map<int, char> example = boost::assign::map_list_of(1, 'a') (2, 'b') (3, 'c'); มีวิธีอื่นที่ไม่มี lib นี้หรือไม่? ฉันได้ลองสิ่งนี้แล้ว แต่มักจะมีปัญหาบางอย่างเกี่ยวกับการเริ่มต้นแผนที่ class myClass{ private: static map<int,int> create_map() { map<int,int> m; m[1] = 2; m[3] = 4; m[5] = 6; return m; } static map<int,int> …

5
จะส่งพารามิเตอร์อย่างไรให้ถูกต้อง?
ฉันเป็นผู้เริ่มต้นใช้งาน C ++ แต่ไม่ใช่ผู้เริ่มเขียนโปรแกรม ฉันกำลังพยายามเรียนรู้ C ++ (c ++ 11) และมันก็ไม่ชัดเจนสำหรับฉันสิ่งที่สำคัญที่สุด: การส่งผ่านพารามิเตอร์ ฉันพิจารณาตัวอย่างง่ายๆเหล่านี้: คลาสที่มีสมาชิกทุกประเภทดั้งเดิม: CreditCard(std::string number, int expMonth, int expYear,int pin):number(number), expMonth(expMonth), expYear(expYear), pin(pin) คลาสที่มีเป็นสมาชิกประเภทดั้งเดิม + 1 ประเภทที่ซับซ้อน: Account(std::string number, float amount, CreditCard creditCard) : number(number), amount(amount), creditCard(creditCard) คลาสที่มีเป็นสมาชิกประเภทดั้งเดิม + 1 คอลเลกชันที่ซับซ้อนบางประเภท: Client(std::string firstName, std::string lastName, std::vector<Account> accounts):firstName(firstName), lastName(lastName), accounts(accounts) …
108 c++  c++11 

13
การต่อสายอักขระที่มีประสิทธิภาพใน C ++
ฉันได้ยินว่ามีคนสองสามคนแสดงความกังวลเกี่ยวกับตัวดำเนินการ "+" ใน std :: string และวิธีแก้ปัญหาต่างๆเพื่อเร่งการเชื่อมต่อ สิ่งเหล่านี้จำเป็นจริงๆหรือไม่? ถ้าเป็นเช่นนั้นวิธีที่ดีที่สุดในการเชื่อมสตริงใน C ++ คืออะไร?

8
วิธีที่ถูกต้องในการกำหนดเมธอด C ++ namespace ในไฟล์. cpp
อาจจะซ้ำกัน แต่ไม่ใช่เรื่องง่ายที่จะค้นหา ... ให้ส่วนหัวเช่น: namespace ns1 { class MyClass { void method(); }; } ฉันเห็นว่ามีการmethod()กำหนดไว้หลายวิธีในไฟล์. cpp: เวอร์ชัน 1: namespace ns1 { void MyClass::method() { ... } } เวอร์ชัน 2: using namespace ns1; void MyClass::method() { ... } เวอร์ชัน 3: void ns1::MyClass::method() { ... } มีวิธีที่ 'ถูกต้อง' หรือไม่? สิ่งเหล่านี้ 'ผิด' หรือไม่ที่ไม่ได้หมายถึงสิ่งเดียวกันทั้งหมด?

6
การสืบทอดจากคลาสเทมเพลตใน c ++
สมมติว่าเรามีคลาสเทมเพลตAreaซึ่งมีตัวแปรสมาชิกT areaa T getArea()และvoid setArea(T)ฟังก์ชันสมาชิก ฉันสามารถสร้างวัตถุชนิดโดยเฉพาะการพิมพ์AreaArea<int> ตอนนี้ฉันมีคลาสRectangleที่สืบทอดAreaคลาส เนื่องจากRectangleตัวมันเองไม่ใช่เทมเพลตฉันจึงไม่สามารถพิมพ์Rectangle<int>ได้ ฉันจะเชี่ยวชาญAreaประเภทที่สืบทอดมาสำหรับRectangleวัตถุได้อย่างไร แก้ไข: ขออภัยฉันลืมที่จะชี้แจง - คำถามของฉันคือเป็นไปได้หรือไม่ที่จะสืบทอด Area โดยไม่เชี่ยวชาญดังนั้นจึงไม่ได้รับการสืบทอดเป็น Area of ​​ints แต่เนื่องจาก Area Rectangle สามารถเชี่ยวชาญประเภทสำหรับ


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