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

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

10
ทำไม printf (“% f”, 0); ให้พฤติกรรมที่ไม่ได้กำหนด?
คำสั่ง printf("%f\n",0.0f); พิมพ์ 0. อย่างไรก็ตามคำสั่ง printf("%f\n",0); พิมพ์ค่าสุ่ม ฉันรู้ว่าฉันกำลังแสดงพฤติกรรมบางอย่างที่ไม่ได้กำหนด แต่ฉันไม่สามารถหาสาเหตุได้โดยเฉพาะ ค่าทศนิยมที่บิตทั้งหมดเป็น 0 ยังคงใช้ได้floatโดยมีค่าเป็น 0 floatและintมีขนาดเท่ากันบนเครื่องของฉัน (หากเกี่ยวข้องกัน) เหตุใดการใช้ลิเทอรัลจำนวนเต็มแทนที่จะเป็นลิเทอรัลจุดลอยตัวจึงprintfทำให้เกิดพฤติกรรมนี้ ปล. พฤติกรรมเดียวกันนี้สามารถมองเห็นได้ถ้าฉันใช้ int i = 0; printf("%f\n", i);

13
ฉันจะทำให้ Memcached ทำงานบนระบบ Windows (x64) 64 บิตได้หรือไม่
ไม่มีใครรู้ว่าถ้า , เมื่อไหร่หรือวิธีการที่ฉันจะได้รับmemcachedทำงานบนสภาพแวดล้อม 64bit Windows? ฉันกำลังตั้งค่าโซลูชันโฮสติ้งใหม่และต้องการใช้ระบบปฏิบัติการ 64 บิตเป็นอย่างมากและเนื่องจากเป็นโซลูชัน ASP.Net MVC ที่มี SQL Server DB ระบบปฏิบัติการจะเป็น Windows Server 2003 หรือ (หวังว่า!) 2008 ฉันรู้ว่าสิ่งนี้อาจทำให้เกิดการถกเถียงเกี่ยวกับ 32 บิตกับ 64 บิตบนเซิร์ฟเวอร์ แต่สมมติว่าความชอบของฉันคือ 64 บิตและฉันมีเหตุผลที่ดีมาก จนถึงตอนนี้ผมได้พยายามจำนวนของตัวเลือกและพบบิตของความช่วยเหลือที่เกี่ยวข้องกับการได้รับการขึ้นนี้บนเครื่อง 32bit (และประสบความสำเร็จก็อาจเพิ่ม) แต่ตั้งแต่เดิมพอร์ตของ Windowsเป็น Win32 เฉพาะนี้คือแทบจะไม่ไปช่วย เมื่อติดตั้งเป็นบริการบน x64 นอกจากนี้ยังมีการพึ่งพาตัวปลดปล่อยซึ่งฉันสามารถรับเวอร์ชันที่คอมไพล์ Win32 ฉันสงสัยว่าการโหลดทั้งหมดนี้ใน C ++ และการกด "คอมไพล์" (สำหรับ 64 บิต) จะไม่ได้ผลอย่างน้อยเพราะความแตกต่างที่ซับซ้อนในสถาปัตยกรรม 32 …
87 c#  c++  windows  64-bit  memcached 

5
โมดูลไม่ปลอดภัยสำหรับ SAFESEH อิมเมจ C ++
ฉันใช้ Microsoft Visual Studio 2011 Professional Beta ฉันพยายามเรียกใช้ไฟล์ OpenCV C ++ ( http://opencv.willowgarage.com/wiki/Welcome ) ที่ฉันได้รวบรวมโดยใช้ cMake & the Visual Studio Complier อย่างไรก็ตามเมื่อฉันไปที่ดีบักโครงการฉันได้รับข้อผิดพลาดมากกว่า 600 ข้อส่วนใหญ่เป็น: ข้อผิดพลาด LNK2026: โมดูลไม่ปลอดภัยสำหรับอิมเมจ SAFESEH เห็นได้ชัดว่าไฟล์เหล่านี้อยู่ในโครงการ opencv_ffmpeg แต่ฉันหาไม่พบฉันได้ดูที่หน้าตัวจัดการข้อยกเว้น Safeeseh ในหน้าวิธีใช้ของ Microsoft แต่ฉันไม่พบคำตอบที่ชัดเจน ฉันสงสัยว่ามีใครบ้างที่มีปัญหานี้และถ้าพวกเขาสามารถแก้ไขได้

12
TCHAR ยังคงมีความเกี่ยวข้องอยู่หรือไม่?
ฉันเพิ่งเริ่มเขียนโปรแกรม Windows และหลังจากอ่านหนังสือ Petzold ฉันสงสัยว่า: ยังคงเป็นแนวทางปฏิบัติที่ดีในการใช้TCHARtype และ_T()function เพื่อประกาศสตริงหรือว่าฉันควรใช้wchar_tand L""strings ในโค้ดใหม่หรือไม่ ฉันจะกำหนดเป้าหมายเฉพาะ Windows 2000 ขึ้นไปและรหัสของฉันจะเป็นi18nตั้งแต่เริ่มต้น
87 c++  c  windows  unicode  wchar-t 

4
รับองค์ประกอบสุดท้ายของ std :: string
ฉันสงสัยว่ามีตัวย่อหรือวิธีที่หรูหรากว่าในการรับอักขระสุดท้ายของสตริงเช่นใน: char lastChar = myString.at( myString.length() - 1 ); สิ่งที่myString.back()ดูเหมือนจะไม่มีอยู่จริง มีเทียบเท่าหรือไม่?
87 c++  string 

9
มีการใช้โมฆะ * อย่างถูกกฎหมายหรือไม่?
มีการใช้งานvoid*C ++ อย่างถูกกฎหมายหรือไม่? หรือสิ่งนี้ถูกแนะนำเพราะมี C? เพื่อสรุปความคิดของฉัน: อินพุต : หากเราต้องการอนุญาตประเภทอินพุตหลายประเภทเราสามารถโอเวอร์โหลดฟังก์ชันและเมธอดหรือเราสามารถกำหนดคลาสพื้นฐานทั่วไปหรือเทมเพลต (ขอบคุณที่กล่าวถึงสิ่งนี้ในคำตอบ) ในทั้งสองกรณีรหัสจะได้รับการอธิบายมากขึ้นและมีข้อผิดพลาดน้อยลง (หากคลาสพื้นฐานถูกนำไปใช้อย่างมีเหตุผล) ผลลัพธ์ : ฉันไม่สามารถนึกถึงสถานการณ์ใด ๆ ที่ฉันต้องการได้รับ void*เมื่อเทียบกับสิ่งที่มาจากคลาสพื้นฐานที่รู้จัก เพียงเพื่อให้ชัดเจนว่าฉันหมายถึงอะไร: ฉันไม่ได้ถามเป็นพิเศษว่ามี use-case สำหรับvoid*แต่ถ้ามีvoid*ทางเลือกที่ดีที่สุดหรือมีให้เลือกเท่านั้น ซึ่งได้รับคำตอบอย่างสมบูรณ์แบบจากหลาย ๆ คนด้านล่าง
87 c++ 

8
วิธีสร้างกราฟการโทรสำหรับรหัส C ++
ฉันกำลังพยายามสร้างกราฟการโทรเพื่อค้นหาเส้นทางการดำเนินการที่เป็นไปได้ทั้งหมดที่มีการกดปุ่มฟังก์ชันเฉพาะ (เพื่อที่ฉันจะได้ไม่ต้องค้นหาเส้นทางทั้งหมดด้วยตนเองเนื่องจากมีหลายเส้นทางที่นำไปสู่ฟังก์ชันนี้ ). ตัวอย่างเช่น: path 1: A -> B -> C -> D path 2: A -> B -> X -> Y -> D path 3: A -> G -> M -> N -> O -> P -> S -> D ... path n: ... ฉันได้ลองใช้ Codeviz และ Doxygen แล้วผลลัพธ์ทั้งสองไม่แสดงอะไรเลยนอกจากการเรียกฟังก์ชันเป้าหมาย …

5
เหตุใดจึงไม่มีการประกาศ NULL
ฉันมีปัญหากับโครงสร้างโครงสร้างนี้เมื่อฉันพยายามรวบรวมรหัสนี้: typedef struct Node { Node( int data ) // { this->data = data; previous = NULL; // Compiler indicates here next = NULL; } int data; Node* previous; Node* next; } NODE; เมื่อฉันพบข้อผิดพลาดนี้เกิดขึ้น: \linkedlist\linkedlist.h||In constructor `Node::Node(int)':| \linkedlist\linkedlist.h|9|error: `NULL' was not declared in this scope| ||=== Build finished: 1 errors, …
87 c++  syntax  nodes 

5
ข้อผิดพลาด: การเริ่มต้นที่ไม่ถูกต้องของการอ้างอิงที่ไม่ใช่ const ของประเภท 'int &' จาก rvalue ของประเภท 'int'
แบบฟอร์มไม่ถูกต้อง: int &z = 12; แบบฟอร์มที่ถูกต้อง: int y; int &r = y; คำถาม : ทำไมรหัสแรกผิด? "ความหมาย " ของข้อผิดพลาดในชื่อเรื่องคืออะไร?

4
ฟีเจอร์ทดลองของ C ++ สมัยใหม่เชื่อถือได้สำหรับโครงการระยะยาวหรือไม่?
ฉันมีโปรเจ็กต์ที่ใช้ C ++ 11/14 อยู่ในขณะนี้ แต่มันต้องการบางอย่างเช่นstd::filesystemซึ่งมีเฉพาะใน C ++ 17 เท่านั้นดังนั้นฉันจึงไม่มีโอกาสใช้มันในตอนนี้ อย่างไรก็ตามฉันเห็นว่ามีอยู่ในคอมไพเลอร์ปัจจุบันของฉันในชื่อstd::experimental::filesystemไฟล์. เป็นความคิดที่ดีไหมที่จะใช้ฟีเจอร์ทดลองโดยสมมติว่าในอนาคตฉันสามารถเพิ่มสิ่งต่างๆเช่น: #ifdef CXX17 //if this is C++17 std::filesystem::something ...; #else std::experimental::filesystem::something ...; #endif ข้อกังวลของฉันคือ: 1. รับประกันหรือไม่ว่าคอมไพเลอร์ที่เข้ากันได้ทั้งหมดมีคุณสมบัติการทดลองเหมือนกัน? 2. ฟีเจอร์ทดลองมีแนวโน้มที่จะเกิดการเปลี่ยนแปลงครั้งใหญ่ที่ทำให้ไม่น่าเชื่อถือหรือไม่? อาจจะมีอะไรให้สงสัยอีก เหตุใดฉันจึงควรหรือไม่ควรใช้ ฉันงงงวยกับโครงการใหม่และไม่รู้ว่าจะตัดสินใจอะไร

3
Copy constructor และ = operator overload ใน C ++: เป็นฟังก์ชันทั่วไปที่เป็นไปได้หรือไม่?
ตั้งแต่ตัวสร้างสำเนา MyClass(const MyClass&); และตัวดำเนินการ = โอเวอร์โหลด MyClass& operator = (const MyClass&); มีรหัสเดียวกันพารามิเตอร์เดียวกันและแตกต่างกันเพียงแค่ผลตอบแทนเป็นไปได้ไหมที่จะมีฟังก์ชันทั่วไปให้ทั้งคู่ใช้?

7
C / C ++: บังคับลำดับฟิลด์บิตและการจัดตำแหน่ง
ฉันอ่านว่าลำดับของเขตข้อมูลบิตภายในโครงสร้างเป็นแพลตฟอร์มเฉพาะ แล้วถ้าฉันใช้ตัวเลือกการบรรจุเฉพาะของคอมไพเลอร์ที่แตกต่างกันข้อมูลการรับประกันนี้จะถูกจัดเก็บตามลำดับที่ถูกต้องตามที่เขียนหรือไม่ ตัวอย่างเช่น: struct Message { unsigned int version : 3; unsigned int type : 1; unsigned int id : 5; unsigned int data : 6; } __attribute__ ((__packed__)); บนโปรเซสเซอร์ Intel ที่มีคอมไพเลอร์ GCC ฟิลด์ต่างๆจะถูกจัดวางไว้ในหน่วยความจำตามที่แสดง Message.versionเป็น 3 บิตแรกในบัฟเฟอร์และMessage.typeตามด้วย หากฉันพบตัวเลือกการบรรจุโครงสร้างที่เทียบเท่ากันสำหรับคอมไพเลอร์ต่างๆสิ่งนี้จะเป็นข้ามแพลตฟอร์มหรือไม่

15
วิธีจำลอง "กดปุ่มใด ๆ เพื่อดำเนินการต่อ"
ฉันกำลังพยายามเขียนโปรแกรม C ++ ซึ่งเมื่อผู้ใช้ป้อนอักขระใด ๆ จากแป้นพิมพ์และควรย้ายไปที่บรรทัดถัดไปของรหัส นี่คือรหัสของฉัน: char c; cin>>c; cout<<"Something"<<endl; แต่มันใช้งานไม่ได้เพราะมันจะเลื่อนไปยังบรรทัดถัดไปเมื่อฉันป้อนอักขระบางตัวแล้วกด ENTER หรือ ถ้าฉันใช้สิ่งนี้ cin.get() or cin.get(c) มันย้ายไปที่บรรทัดคำสั่งถัดไปเมื่อฉันกด Enter แต่ฉันต้องการให้มันเลื่อนไปยังบรรทัดถัดไปบนแป้นใด ๆ ที่กดบนแป้นพิมพ์จะทำได้อย่างไร?
87 c++ 

5
เหตุใด C และ C ++ จึงสนับสนุนการกำหนดอาร์เรย์แบบสมาชิกภายในโครงสร้าง แต่โดยทั่วไปแล้วไม่ใช่
ฉันเข้าใจว่าไม่รองรับการกำหนดอาร์เรย์แบบสมาชิกดังนั้นสิ่งต่อไปนี้จะใช้ไม่ได้: int num1[3] = {1,2,3}; int num2[3]; num2 = num1; // "error: invalid array assignment" ฉันเพิ่งยอมรับสิ่งนี้ว่าเป็นความจริงโดยคิดว่าจุดมุ่งหมายของภาษาคือการจัดเตรียมเฟรมเวิร์กแบบปลายเปิดและให้ผู้ใช้ตัดสินใจว่าจะใช้บางสิ่งบางอย่างเช่นการคัดลอกอาร์เรย์อย่างไร อย่างไรก็ตามสิ่งต่อไปนี้ใช้งานได้: struct myStruct { int num[3]; }; struct myStruct struct1 = {{1,2,3}}; struct myStruct struct2; struct2 = struct1; อาร์เรย์num[3]เป็นสมาชิกที่กำหนดจากอินสแตนซ์ในstruct1อินสแตนซ์ในstruct2. เหตุใดการมอบหมายอาร์เรย์ที่ชาญฉลาดของสมาชิกจึงได้รับการสนับสนุนสำหรับโครงสร้าง แต่โดยทั่วไปไม่ได้รับการสนับสนุน แก้ไข : ความคิดเห็นของRoger Pateในเธรดstd :: string ใน struct - ปัญหาการคัดลอก / การกำหนด? ดูเหมือนจะชี้ไปในทิศทางทั่วไปของคำตอบ …

5
การเปรียบเทียบที่ลงชื่อ / ไม่ได้ลงนาม
ฉันพยายามทำความเข้าใจว่าเหตุใดรหัสต่อไปนี้จึงไม่ออกคำเตือนในสถานที่ที่ระบุ //from limits.h #define UINT_MAX 0xffffffff /* maximum unsigned int value */ #define INT_MAX 2147483647 /* maximum (signed) int value */ /* = 0x7fffffff */ int a = INT_MAX; //_int64 a = INT_MAX; // makes all warnings go away unsigned int b = UINT_MAX; bool c = false; if(a < …

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