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

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

5
ความพยายามในการกำหนดค่าเริ่มต้นของฉันถูกตีความเป็นการประกาศฟังก์ชั่นและเหตุใดจึงไม่ A (()); แก้มันได้หรือไม่
ในบรรดาหลาย ๆ สิ่ง Stack Stack ล้นได้สอนฉันคือสิ่งที่เรียกว่า "แจงที่สุด vexing" ซึ่งแสดงให้เห็นคลาสสิกกับสายเช่น A a(B()); //declares a function ในขณะนี้สำหรับส่วนใหญ่โดยสัญชาตญาณดูเหมือนจะเป็นการประกาศของวัตถุaประเภทAรับBวัตถุชั่วคราวเป็นพารามิเตอร์ตัวสร้างมันจริง ๆ แล้วการประกาศฟังก์ชั่นaกลับมาการAใช้ตัวชี้ไปยังฟังก์ชั่นที่กลับมาBและตัวเองไม่ใช้พารามิเตอร์ . ในทำนองเดียวกันบรรทัด A a(); //declares a function ยังอยู่ภายใต้หมวดหมู่เดียวกันเนื่องจากแทนที่จะเป็นวัตถุมันประกาศฟังก์ชั่น ตอนนี้ในกรณีแรกวิธีแก้ปัญหาตามปกติสำหรับปัญหานี้คือการเพิ่มชุดพิเศษของวงเล็บ / วงเล็บรอบในB()ขณะที่คอมไพเลอร์จะตีความมันเป็นการประกาศของวัตถุ A a((B())); //declares an object อย่างไรก็ตามในกรณีที่สองการทำเช่นเดียวกันทำให้เกิดข้อผิดพลาดในการคอมไพล์ A a(()); //compile error คำถามของฉันคือทำไม ใช่ฉันทราบดีว่า 'วิธีแก้ไข' ที่ถูกต้องคือเปลี่ยนเป็นA a;แต่ฉันอยากรู้ว่าอะไรคือสิ่งที่พิเศษ()สำหรับคอมไพเลอร์ในตัวอย่างแรกซึ่งไม่ทำงานเมื่อนำมาใช้ใหม่ ตัวอย่างที่สอง เป็นA a((B()));วิธีแก้ปัญหาข้อยกเว้นเฉพาะเขียนลงในมาตรฐานหรือไม่
158 c++ 

6
__FILE__, __LINE__ และ __FUNCTION__ การใช้งานใน C ++
ทะนงว่าคุณ c ++ คอมไพเลอร์สนับสนุนพวกเขาจะมีเหตุผลใด ๆ โดยเฉพาะอย่างยิ่งไม่ได้กับการใช้งาน__FILE__, __LINE__และ__FUNCTION__สำหรับการบันทึกและวัตถุประสงค์ในการแก้จุดบกพร่อง? ฉันมักเกี่ยวข้องกับการให้ข้อมูลที่ทำให้ผู้ใช้เข้าใจผิดเช่นการรายงานหมายเลขบรรทัดหรือฟังก์ชั่นที่ไม่ถูกต้องอันเป็นผลมาจากการปรับให้เหมาะสม โดยทั่วไปฉันสามารถไว้วางใจ__FILE__, __LINE__และ__FUNCTION__จะเสมอทำสิ่งที่ถูกต้อง?

4
คุณจะออกจากฟังก์ชัน void ใน C ++ ได้อย่างไร
คุณจะออกจากฟังก์ชั่นก่อนกำหนดได้อย่างไรโดยไม่คืนค่าถ้าเป็นโมฆะ? ฉันมีวิธีการโมฆะที่ไม่จำเป็นต้องเรียกใช้รหัสถ้าเงื่อนไขบางอย่างเป็นจริง ฉันไม่ต้องการเปลี่ยนวิธีการคืนค่าจริง ๆ
158 c++ 

9
เหตุใดการไหลออกจากจุดสิ้นสุดของฟังก์ชันที่ไม่ใช่โมฆะโดยไม่ส่งคืนค่าไม่ทำให้เกิดข้อผิดพลาดของคอมไพเลอร์
นับตั้งแต่ฉันรู้มาหลายปีแล้วว่าสิ่งนี้ไม่ได้สร้างข้อผิดพลาดตามค่าเริ่มต้น (อย่างน้อยใน GCC) ฉันสงสัยอยู่เสมอว่าเพราะอะไร ฉันเข้าใจว่าคุณสามารถออกธงคอมไพเลอร์เพื่อสร้างคำเตือน แต่มันควรจะเป็นข้อผิดพลาดหรือไม่? ทำไมมันจึงสมเหตุสมผลสำหรับฟังก์ชั่นที่ไม่ใช่โมฆะไม่คืนค่าที่ถูกต้อง? ตัวอย่างตามที่ร้องขอในความคิดเห็น: #include <stdio.h> int stringSize() { } int main() { char cstring[5]; printf( "the last char is: %c\n", cstring[stringSize()-1] ); return 0; } ... คอมไพล์
158 c++  c  gcc  g++ 

14
เทมเพลต C ++ ที่ยอมรับเฉพาะบางประเภท
ใน Java คุณสามารถกำหนดคลาสทั่วไปที่ยอมรับเฉพาะประเภทที่ขยายคลาสที่คุณเลือกเช่น: public class ObservableList<T extends List> { ... } ทำได้โดยใช้คำหลัก "ขยาย" มีบางอย่างที่เทียบเท่ากับคำหลักนี้ใน C ++?
158 c++  templates 

4
ตัวแปรสแตติกในฟังก์ชันสมาชิก
ใครช่วยกรุณาอธิบายว่าตัวแปรสแตติกในฟังก์ชันสมาชิกทำงานใน C ++ ได้อย่างไร รับคลาสต่อไปนี้: class A { void foo() { static int i; i++; } } หากฉันประกาศหลายอินสแตนซ์การAเรียกfoo()ใช้อินสแตนซ์หนึ่งเพิ่มตัวแปรสแตติกiในทุกอินสแตนซ์หรือไม่ หรือเพียงอันเดียวที่ถูกเรียกใช้? ฉันสันนิษฐานว่าแต่ละอินสแตนซ์จะมีสำเนาของตัวเองiแต่ก้าวผ่านโค้ดบางอย่างฉันดูเหมือนจะบ่งบอกเป็นอย่างอื่น
158 c++  static  scope 

9
วิธีใช้ C socket API ใน C ++ บน z / OS
ฉันมีปัญหาได้รับ C ซ็อกเก็ต API เพื่อการทำงานที่ถูกต้องในบนC++z/OS ถึงแม้ว่าผมกำลังรวมทั้งsys/socket.hผมยังคงได้รับข้อผิดพลาดรวบรวมเวลาบอกฉันว่าไม่ได้กำหนดไว้AF_INET ฉันขาดอะไรบางอย่างที่ชัดเจนหรือเกี่ยวข้องกับความจริงที่ว่าสิ่งที่z/OSเกิดขึ้นทำให้ปัญหาของฉันซับซ้อนมากขึ้นหรือไม่? ปรับปรุง : จากการตรวจสอบเพิ่มเติมฉันพบว่ามีสิ่ง#ifdefที่ฉันกำลังกดปุ่ม เห็นได้ชัดว่าz/OSไม่มีความสุขนอกจากว่าฉันจะกำหนดซ็อกเก็ต "ประเภท" ที่ฉันใช้ด้วย: #define _OE_SOCKETS ตอนนี้ฉันเองก็ไม่รู้ว่า_OE_SOCKETSมันคืออะไรจริง ๆ แล้วดังนั้นถ้ามีz/OSนักเขียนโปรแกรมซ็อกเก็ตอยู่ที่นั่น (คุณทั้ง 3 คน) บางทีคุณอาจให้ฉันดูว่ามันทำงานอย่างไร แอปทดสอบ #include <sys/socket.h> int main() { return AF_INET; } รวบรวม / ลิงค์ผลลัพธ์: cxx -Wc,xplink -Wl,xplink -o inet_test inet.C "./inet.C", line 5.16: CCN5274 (S) The name lookup for "AF_INET" …
158 c++  c  sockets  mainframe  zos 

6
ลำดับของการวนซ้ำผ่านแผนที่ std :: เป็นที่รู้จัก (และรับประกันโดยมาตรฐาน) หรือไม่
สิ่งที่ฉันหมายถึงคือ - เรารู้ว่าstd::mapองค์ประกอบของเรียงตามคีย์ สมมุติว่ากุญแจนั้นเป็นจำนวนเต็ม หากฉันซ้ำจากstd::map::begin()การstd::map::end()ใช้ a forการรับประกันมาตรฐานจะให้ฉันทำซ้ำตามลำดับผ่านองค์ประกอบที่มีคีย์เรียงตามลำดับจากน้อยไปหามากหรือไม่ ตัวอย่าง: std::map<int, int> map_; map_[1] = 2; map_[2] = 3; map_[3] = 4; for( std::map<int, int>::iterator iter = map_.begin(); iter != map_.end(); ++iter ) { std::cout << iter->second; } สิ่งนี้รับประกันว่าจะพิมพ์234หรือมีการกำหนดการใช้งานหรือไม่ เหตุผลชีวิตจริง: ฉันมีstd::mapกับintคีย์ ในสถานการณ์ที่หายากมากฉันต้องการวนซ้ำองค์ประกอบทั้งหมดด้วยคีย์มากกว่าintค่าที่เป็นรูปธรรม ใช่ดูเหมือนstd::vectorจะเป็นตัวเลือกที่ดีกว่า แต่สังเกต "สถานการณ์ที่หายากมาก" ของฉัน แก้ไข : ฉันรู้ว่าองค์ประกอบของstd::mapเรียงลำดับ .. ไม่จำเป็นต้องชี้ให้เห็น (สำหรับคำตอบส่วนใหญ่ที่นี่) …
158 c++  dictionary  stl  standards 

8
สมาชิกคลาส C ++ จะเริ่มต้นอย่างไรถ้าฉันไม่ทำอย่างชัดเจน?
สมมติว่าฉันได้เรียนกับ memebers ส่วนตัวptr, name, pname, rname, และcrname ageจะเกิดอะไรขึ้นถ้าฉันไม่เริ่มต้นด้วยตนเอง นี่คือตัวอย่าง: class Example { private: int *ptr; string name; string *pname; string &rname; const string &crname; int age; public: Example() {} }; จากนั้นฉันก็: int main() { Example ex; } สมาชิกจะเริ่มต้นอย่างไรในอดีต? เกิดอะไรขึ้นกับพอยน์เตอร์? ทำstringและintรับ 0-intialized กับตัวสร้างเริ่มต้นstring()และint()? สมาชิกอ้างอิงล่ะ? ยังเกี่ยวกับการอ้างอิง const? ฉันควรรู้เรื่องอะไรอีก ไม่มีใครรู้กวดวิชาที่ครอบคลุมกรณีเหล่านี้หรือไม่? บางทีในหนังสือบางเล่ม? ฉันสามารถเข้าถึงห้องสมุดของมหาวิทยาลัยเพื่อรับหนังสือ C …

13
มีค่าใช้จ่ายในการประกาศตัวแปรภายในลูปหรือไม่? (C ++)
ฉันแค่สงสัยว่าจะมีการสูญเสียความเร็วหรือประสิทธิภาพหรือไม่หากคุณทำสิ่งนี้: int i = 0; while(i < 100) { int var = 4; i++; } ซึ่งประกาศint varหนึ่งร้อยครั้ง สำหรับฉันดูเหมือนว่าจะมี แต่ฉันไม่แน่ใจ การทำสิ่งนี้แทนจะทำได้จริงหรือเร็วกว่านี้หรือไม่: int i = 0; int var; while(i < 100) { var = 4; i++; } หรือเหมือนกันอย่างรวดเร็วและมีประสิทธิภาพ?

13
การสร้างจำนวนเต็มแบบสุ่มจากช่วง
ฉันต้องการฟังก์ชั่นที่จะสร้างจำนวนเต็มแบบสุ่มในช่วงที่กำหนด (รวมถึงค่าเส้นขอบ) ฉันไม่ต้องการคุณภาพ / การสุ่มที่ไม่มีเหตุผลฉันมีข้อกำหนดสี่ข้อ: ฉันต้องการมันเร็ว โครงการของฉันต้องสร้างตัวเลขสุ่มนับล้าน (หรือบางครั้งก็เป็นสิบล้าน) และฟังก์ชันตัวสร้างปัจจุบันของฉันได้พิสูจน์แล้วว่าเป็นคอขวด ฉันต้องการมันเพื่อให้มีความสม่ำเสมอ (การใช้แรนด์ () นั้นดีมาก) ช่วง min-max สามารถเป็นอะไรก็ได้ตั้งแต่ <0, 1> ถึง <-32727, 32727> มันจะต้องมีเมล็ด ขณะนี้ฉันมีรหัส C ++ ดังต่อไปนี้: output = min + (rand() * (int)(max - min) / RAND_MAX) ปัญหาคือว่ามันไม่เหมือนกันจริงๆ - max จะถูกส่งคืนเมื่อ rand () = RAND_MAX (สำหรับ Visual C ++ เป็น …
157 c++  random 

4
ข้อผิดพลาด C ++: การอ้างอิงที่ไม่ได้กำหนดกับ 'clock_gettime' และ 'clock_settime'
ฉันค่อนข้างใหม่กับ Ubuntu แต่ดูเหมือนจะใช้งานไม่ได้ มันทำงานได้ดีบนคอมพิวเตอร์ของโรงเรียนและฉันไม่รู้ว่าฉันไม่ได้ทำอะไร ฉันได้ตรวจสอบusr / includeแล้วและเวลามันก็โอเค นี่คือรหัส: #include <iostream> #include <time.h> using namespace std; int main() { timespec time1, time2; int temp; clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1); //do stuff here clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time2); return 0; } ฉันใช้ CodeBlocks เป็น IDE ของฉันเพื่อสร้างและเรียกใช้เช่นกัน ความช่วยเหลือใด ๆ จะดีขอขอบคุณ.
157 c++  linux  ubuntu  posix  time.h 


5
C ++ 11 std :: threads vs เธรด posix
ทำไมฉันจึงควรเลือกอย่างใดอย่างหนึ่งในทางปฏิบัติ อะไรคือความแตกต่างทางเทคนิคยกเว้นstd::threadชั้นเรียน

2
ตัววนซ้ำ -> วินาทีหมายความว่าอะไร
ใน C ++ ประเภทของ a std::map<>::iteratorคืออะไร? เรารู้ว่าอ็อบเจกต์itประเภทstd::map<A,B>::iteratorมีการโอเวอร์โหลดoperator ->ซึ่งส่งคืน a std::pair<A,B>*และว่าstd::pair<>มีfirstและsecondสมาชิก แต่สมาชิกสองคนนี้ทำอะไรกันและทำไมเราต้องเข้าถึงค่าที่เก็บไว้ในแผนที่ด้วยit->second?
157 c++  stl  iterator 

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