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

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

5
std :: function ใช้งานอย่างไร?
ตามแหล่งที่มาที่ฉันพบนิพจน์แลมบ์ดาถูกนำไปใช้โดยคอมไพเลอร์ที่สร้างคลาสที่มีตัวดำเนินการเรียกใช้ฟังก์ชันมากเกินไปและตัวแปรที่อ้างอิงเป็นสมาชิก นี้แสดงให้เห็นว่าขนาดของการแสดงออกแลมบ์ดาแตกต่างกันไปและได้รับการอ้างอิงตัวแปรพอที่ขนาดอาจจะมีขนาดใหญ่โดยพลการ std::functionควรจะมีขนาดคงที่แต่ก็จะต้องสามารถที่จะตัดชนิดของ callables ใด ๆ รวมทั้ง lambdas ชนิดเดียวกันใด ๆ มีการใช้งานอย่างไร? หากstd::functionใช้ตัวชี้ไปยังเป้าหมายภายในจะเกิดอะไรขึ้นเมื่อstd::functionอินสแตนซ์ถูกคัดลอกหรือย้าย มีการจัดสรรฮีปที่เกี่ยวข้องหรือไม่?
102 c++  c++11  lambda 

11
มีวิธีที่ดีกว่าในการแสดงเนมสเปซที่ซ้อนกันใน C ++ ภายในส่วนหัวหรือไม่
ฉันเปลี่ยนจาก C ++ เป็น Java และ C # และคิดว่าการใช้เนมสเปซ / แพ็คเกจนั้นดีกว่ามากที่นั่น (มีโครงสร้างที่ดี) จากนั้นฉันก็กลับมาที่ C ++ และพยายามใช้เนมสเปซในลักษณะเดียวกัน แต่ไวยากรณ์ที่ต้องการนั้นแย่มากในไฟล์ส่วนหัว namespace MyCompany { namespace MyModule { namespace MyModulePart //e.g. Input { namespace MySubModulePart { namespace ... { public class MyClass สิ่งต่อไปนี้ดูแปลกสำหรับฉันเช่นกัน (เพื่อหลีกเลี่ยงการเยื้องลึก): namespace MyCompany { namespace MyModule { namespace MyModulePart //e.g. Input { …
102 c++  syntax  namespaces 


8
การรวบรวมโปรแกรม Hello World อย่างง่ายบน OS X ผ่านบรรทัดคำสั่ง
ฉันมีตัวอย่างง่ายๆของ hello world ที่ฉันพยายามรวบรวมบน OS X ชื่อhw.cpp: #include <iostream> #include <string> using namespace std; int main() { cout << "Hello world!" << endl; return 0; } ฉันต้องการรวบรวมโดยใช้gccแต่ฉันไม่ประสบความสำเร็จ ฉันต้องการฟังตัวเลือกอื่น ๆ เช่นใช้ Xcode หรือไม่
102 c++  xcode  macos 

16
ฟังก์ชันจับเวลาเพื่อให้เวลาเป็นนาโนวินาทีโดยใช้ C ++
ฉันต้องการคำนวณเวลาที่ API ใช้ในการส่งคืนค่า เวลาที่ใช้ในการดำเนินการดังกล่าวอยู่ในช่วงนาโนวินาที เนื่องจาก API เป็นคลาส / ฟังก์ชัน C ++ ฉันจึงใช้ timer.h เพื่อคำนวณค่าเดียวกัน: #include <ctime> #include <cstdio> using namespace std; int main(int argc, char** argv) { clock_t start; double diff; start = clock(); diff = ( std::clock() - start ) / (double)CLOCKS_PER_SEC; cout<<"printf: "<< diff <<'\n'; return 0; } …
101 c++  c  timer 

3
gcc 4.8 หรือบั๊กกี้รุ่นก่อนหน้าเกี่ยวกับนิพจน์ทั่วไปหรือไม่
ฉันพยายามใช้ std :: regex ในโค้ด C ++ 11 แต่ดูเหมือนว่าการรองรับนั้นค่อนข้างมีปัญหา ตัวอย่าง: #include <regex> #include <iostream> int main (int argc, const char * argv[]) { std::regex r("st|mt|tr"); std::cerr << "st|mt|tr" << " matches st? " << std::regex_match("st", r) << std::endl; std::cerr << "st|mt|tr" << " matches mt? " << std::regex_match("mt", r) << …
101 c++  regex  gcc  c++11  libstdc++ 

3
เหตุใดโปรแกรมสไตล์“ Hello World” ที่เรียบง่ายจึงไม่คอมไพล์กับ Turbo C ++?
ฉันได้เริ่มเรียนรู้ C ++ สำหรับคลาสการเขียนโปรแกรมของฉันแล้ว ฉันได้ดาวน์โหลดโปรแกรม "Hello World" นี้: #include <iostream> using namespace std; int main() { cout << "Hello, World!"; return 0; } แต่ Turbo C ++ บ่นว่า: Error D:\HELLO.CPP 1: Unable to open include file 'IOSTREAM' Error D:\HELLO.CPP 2: Declaration syntax error Error D:\HELLO.CPP 6: Undefined symbol 'cout' มีอะไรผิดปกติกับโปรแกรมง่ายๆนี้? …
101 c++  turbo-c++  c++-faq 

8
มีคลาสเรนจ์ใน C ++ 11 สำหรับใช้กับ range ตามลูปหรือไม่?
ฉันพบว่าตัวเองเขียนสิ่งนี้เมื่อไม่นานมานี้: template <long int T_begin, long int T_end> class range_class { public: class iterator { friend class range_class; public: long int operator *() const { return i_; } const iterator &operator ++() { ++i_; return *this; } iterator operator ++(int) { iterator copy(*this); ++i_; return copy; } bool operator ==(const …
101 c++  c++11  std 

14
วิธีที่ดีที่สุดในการวนกลับใน C / C # / C ++ คืออะไร?
ฉันต้องการเลื่อนไปข้างหลังผ่านอาร์เรย์ดังนั้นฉันจึงมีรหัสดังนี้: for (int i = myArray.Length - 1; i >= 0; i--) { // Do something myArray[i] = 42; } มีวิธีที่ดีกว่านี้หรือไม่? อัปเดต: ฉันหวังว่า C # อาจมีกลไกในตัวสำหรับสิ่งนี้: foreachbackwards (int i in myArray) { // so easy } การปรับปรุงที่ 2: มีมีวิธีที่ดีกว่า Rune รับรางวัลด้วย: for (int i = myArray.Length; i-- > 0; ) …
101 c#  c++  c 

2
ข้อผิดพลาดของคอมไพเลอร์: memset ไม่ได้รับการประกาศในขอบเขตนี้
ฉันพยายามรวบรวมโปรแกรม C ของฉันใน Ubuntu 9.10 (gcc 4.4.1) ฉันได้รับข้อผิดพลาดนี้: Rect.cpp:344: error: ‘memset’ was not declared in this scope แต่ปัญหาคือฉันได้รวมไว้ในไฟล์ cpp แล้ว: #include <stdio.h> #include <stdlib.h> และโปรแกรมเดียวกันรวบรวมได้ดีภายใต้ Ubuntu 8.04 (gcc 4.2.4) ช่วยบอกฉันทีว่าฉันขาดอะไรไป
101 c++  gcc 

6
การใช้ {} ในคำสั่งกรณี ทำไม?
ประเด็นในการใช้{และ}ในcaseคำสั่งคืออะไร? โดยปกติไม่ว่าจะมีกี่บรรทัดในcaseคำสั่งบรรทัดทั้งหมดจะถูกดำเนินการ นี่เป็นเพียงกฎเกี่ยวกับคอมไพเลอร์รุ่นเก่า / ใหม่กว่าหรือมีบางอย่างอยู่เบื้องหลัง? int a = 0; switch (a) { case 0:{ std::cout << "line1\n"; std::cout << "line2\n"; break; } } และ int a = 0; switch (a) { case 0: std::cout << "line1\n"; std::cout << "line2\n"; break; }

13
ฉันสามารถใช้สมาชิกประเภท "ตนเอง" แบบอิสระใน C ++ ได้หรือไม่
C ++ ไม่มีคีย์เวิร์ดที่เทียบเท่าของPHPselfซึ่งประเมินเป็นประเภทของคลาสปิดล้อม ง่ายพอที่จะปลอมเป็นรายชั้น: struct Foo { typedef Foo self; }; แต่ฉันต้องเขียนFooอีกครั้ง บางทีวันหนึ่งฉันอาจจะเข้าใจผิดและทำให้เกิดข้อผิดพลาด ฉันสามารถใช้ชุดค่าผสมdecltypeและเพื่อนเพื่อทำให้งานนี้เป็นแบบ "อัตโนมัติ" ได้หรือไม่ ฉันลองทำสิ่งต่อไปนี้แล้วแต่thisใช้ไม่ได้ในที่นั้น: struct Foo { typedef decltype(*this) self; }; // main.cpp:3:22: error: invalid use of 'this' at top level // typedef decltype(*this) self; (ฉันจะไม่กังวลเกี่ยวกับการเทียบเท่าstaticซึ่งจะเหมือนกัน แต่มีผลผูกพันในช่วงปลาย)
101 c++  c++11 

11
รวบรวมการแฮชสตริงเวลา
ฉันได้อ่านในที่ต่างๆไม่กี่แห่งว่าการใช้ตัวอักษรสตริงใหม่ของ C ++ 11 อาจเป็นไปได้ที่จะคำนวณแฮชของสตริงในเวลาคอมไพล์ อย่างไรก็ตามดูเหมือนจะไม่มีใครพร้อมที่จะออกมาพูดว่ามันจะเป็นไปได้หรือจะทำได้อย่างไร เป็นไปได้หรือไม่ ตัวดำเนินการจะมีลักษณะอย่างไร? ฉันสนใจเป็นพิเศษกรณีการใช้งานเช่นนี้ void foo( const std::string& value ) { switch( std::hash(value) ) { case "one"_hash: one(); break; case "two"_hash: two(); break; /*many more cases*/ default: other(); break; } } หมายเหตุ: ฟังก์ชันแฮชเวลาคอมไพล์ไม่จำเป็นต้องมีลักษณะตรงตามที่ฉันเขียนไว้ ฉันพยายามอย่างดีที่สุดที่จะเดาว่าทางออกสุดท้ายจะเป็นอย่างไร แต่meta_hash<"string"_meta>::valueก็อาจเป็นทางออกที่ใช้ได้

10
วิธีที่เร็วที่สุด (เวลาแฝงต่ำ) สำหรับการสื่อสารระหว่างกระบวนการระหว่าง Java และ C / C ++
ฉันมีแอป Java ที่เชื่อมต่อผ่านซ็อกเก็ต TCP ไปยัง "เซิร์ฟเวอร์" ที่พัฒนาใน C / C ++ ทั้งแอพและเซิร์ฟเวอร์ทำงานบนเครื่องเดียวกันกล่อง Solaris (แต่เรากำลังพิจารณาที่จะย้ายไปยัง Linux ในที่สุด) ประเภทของข้อมูลที่แลกเปลี่ยนคือข้อความธรรมดา (ล็อกอินเข้าสู่ระบบ ACK จากนั้นไคลเอนต์ขอบางสิ่งบางอย่างการตอบกลับของเซิร์ฟเวอร์) แต่ละข้อความมีความยาวประมาณ 300 ไบต์ ขณะนี้เราใช้ Sockets และทุกอย่างก็โอเคอย่างไรก็ตามฉันกำลังมองหาวิธีที่เร็วกว่าในการแลกเปลี่ยนข้อมูล (เวลาแฝงที่ต่ำกว่า) โดยใช้วิธี IPC ฉันได้ทำการค้นคว้าทางเน็ตและได้ทำการอ้างอิงถึงเทคโนโลยีต่อไปนี้: หน่วยความจำที่ใช้ร่วมกัน ท่อ คิว รวมทั้งสิ่งที่เรียกว่า DMA (Direct Memory Access) แต่ฉันไม่พบการวิเคราะห์ที่เหมาะสมของการแสดงตามลำดับทั้งวิธีการใช้งานทั้งใน JAVA และ C / C ++ (เพื่อให้พวกเขาสามารถพูดคุยกันได้) ยกเว้นท่อที่ฉันสามารถจินตนาการได้ว่าจะทำอย่างไร ใครสามารถแสดงความคิดเห็นเกี่ยวกับประสิทธิภาพและความเป็นไปได้ของแต่ละวิธีในบริบทนี้ ตัวชี้ / …
101 java  c++  performance  ipc  latency 

3
จะเชี่ยวชาญ std :: hash <Key> :: operator () สำหรับชนิดที่ผู้ใช้กำหนดในคอนเทนเนอร์ที่ไม่ได้เรียงลำดับได้อย่างไร
ในการรองรับประเภทคีย์ที่ผู้ใช้กำหนดstd::unordered_set&lt;Key&gt;และstd::unordered_map&lt;Key, Value&gt; ต้องระบุoperator==(Key, Key)และแฮช functor: struct X { int id; /* ... */ }; bool operator==(X a, X b) { return a.id == b.id; } struct MyHash { size_t operator()(const X&amp; x) const { return std::hash&lt;int&gt;()(x.id); } }; std::unordered_set&lt;X, MyHash&gt; s; จะสะดวกกว่าในการเขียนstd::unordered_set&lt;X&gt; โดยใช้แฮชเริ่มต้นสำหรับประเภทXเช่นประเภทที่มาพร้อมกับคอมไพเลอร์และไลบรารี หลังจากปรึกษา C ++ Standard Draft N3242 §20.8.12 …

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