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

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

3
ประสบการณ์การใช้ไลบรารีการบันทึก Boost.Log? [ปิด]
ตามที่กล่าวมาในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบถาม & ตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจก่อให้เกิดการถกเถียงโต้แย้งการสำรวจความคิดเห็นหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงได้และอาจเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อรับคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา ฉันกำลังพิจารณาการเริ่มต้นการใช้ห้องสมุดการเข้าสู่ระบบ Boost.Log มีใครใช้ Boost.Log บ้าง? กรุณาแบ่งปันประสบการณ์ของคุณในเรื่องนี้ ไลบรารีอื่น ๆ ที่ฉันกำลังพิจารณาคือ Apache log4cxx (ดูเหมือนจะน่าเบื่อในการติดตั้ง แต่เพื่อนร่วมทีมของฉันต้องการสิ่งที่ง่ายในการเริ่มต้น) และ Pantheios (ปัญหาเดียวกันเนื่องจากทำงานร่วมกับส่วนหน้าและส่วนหลังพิเศษ)
88 c++  boost  logging  boost-log 

4
ความหมายของ int (*) (int *) = 5 (หรือค่าจำนวนเต็ม)
ฉันคิดไม่ออก: int main() { int (*) (int *) = 5; return 0; } การมอบหมายข้างต้นรวบรวมด้วย g ++ c ++ 11 ฉันรู้ว่านั่นint (*) (int *)เป็นตัวชี้ไปยังฟังก์ชันที่ยอมรับ(int *)เป็นอาร์กิวเมนต์และส่งกลับค่า int แต่ฉันไม่เข้าใจว่าคุณจะเทียบเคียงเป็น 5 ได้อย่างไรในตอนแรกฉันคิดว่ามันเป็นฟังก์ชันที่คืนค่า 5 อย่างต่อเนื่อง (จากการเรียนรู้ล่าสุดของฉันใน F # น่าจะเป็นฮ่าฮ่า) จากนั้นฉันก็คิดสั้น ๆ ว่าตัวชี้ฟังก์ชันชี้ไปที่ตำแหน่งหน่วยความจำ 5 แต่ไม่ได้ผลชัดเจนและไม่มีค่าฐานสิบหก คิดว่าอาจเป็นเพราะฟังก์ชันส่งคืน int และการกำหนด int ก็โอเค (อย่างใด) ฉันก็ลองสิ่งนี้ด้วย: int * (*) (int …

6
แบบอิงตามช่วงสำหรับการทำงานสำหรับอาร์เรย์ธรรมดาอย่างไร
ใน C ++ 11 คุณสามารถใช้การอ้างอิงตามช่วงforซึ่งทำหน้าที่เป็นforeachภาษาอื่น ๆ ใช้งานได้แม้กับอาร์เรย์ C ธรรมดา: int numbers[] = { 1, 2, 3, 4, 5 }; for (int& n : numbers) { n *= 2; } จะรู้ได้อย่างไรว่าเมื่อไรควรหยุด? ใช้ได้เฉพาะกับอาร์เรย์แบบคงที่ที่ได้รับการประกาศในขอบเขตเดียวกันกับforใช้หรือไม่? คุณจะใช้สิ่งนี้forกับอาร์เรย์แบบไดนามิกอย่างไร
88 c++  arrays  foreach  c++11 

2
gcc / g ++:“ ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว”
g++ ทำให้ฉันมีข้อผิดพลาดของแบบฟอร์ม: foo.cc:<line>:<column>: fatal error: <bar>: No such file or directory compilation terminated. จะเหมือนกันเมื่อคอมไพล์โปรแกรม C ด้วยgcc. ทำไมถึงเป็นเช่นนั้น? โปรดทราบ:คำถามนี้ถูกถามหลายครั้งก่อนหน้านี้ แต่ทุกครั้งจะเฉพาะเจาะจงสำหรับสถานการณ์ของผู้ถาม จุดประสงค์ของคำถามนี้คือการมีคำถามที่ผู้อื่นสามารถปิดเป็นรายการที่ซ้ำกันได้ทุกครั้ง คำถามที่พบบ่อย
88 c++  c  gcc  g++  c++-faq 

5
การทำความเข้าใจ std :: atomic :: Compare_exchange_weak () ใน C ++ 11
bool compare_exchange_weak (T& expected, T val, ..); compare_exchange_weak()เป็นหนึ่งในการเปรียบเทียบแบบดั้งเดิมของการแลกเปลี่ยนที่มีให้ใน C ++ 11 มันอ่อนแอexpectedในแง่ที่ว่ามันกลับเท็จแม้ว่ามูลค่าของวัตถุที่มีค่าเท่ากับ นี่เป็นเพราะความล้มเหลวปลอมในบางแพลตฟอร์มที่มีการใช้ลำดับของคำสั่ง (แทนที่จะเป็นหนึ่งใน x86) เพื่อใช้งาน บนแพลตฟอร์มดังกล่าวการสลับบริบทการโหลดที่อยู่เดียวกัน (หรือบรรทัดแคช) ซ้ำโดยเธรดอื่น ฯลฯ อาจทำให้ระบบดั้งเดิมล้มเหลว มันspuriousไม่ใช่ค่าของวัตถุ (ไม่เท่ากับexpected) ที่ทำให้การดำเนินการล้มเหลว แต่มันเป็นปัญหาเรื่องเวลา แต่สิ่งที่ทำให้ฉันไขปริศนาคือสิ่งที่พูดใน C ++ 11 Standard (ISO / IEC 14882) 29.6.5 .. ผลที่ตามมาของความล้มเหลวปลอมคือการใช้การเปรียบเทียบและแลกเปลี่ยนที่อ่อนแอเกือบทั้งหมดจะวนเวียน เหตุใดจึงต้องวนซ้ำในการใช้งานเกือบทั้งหมด ? นั่นหมายความว่าเราจะวนซ้ำเมื่อมันล้มเหลวเพราะความล้มเหลวปลอม ๆ ? ถ้าเป็นเช่นนั้นทำไมเราต้องใช้compare_exchange_weak()และเขียนลูปด้วยตัวเอง? เราสามารถใช้compare_exchange_strong()สิ่งที่ฉันคิดว่าควรกำจัดความล้มเหลวปลอมให้เราได้ อะไรคือกรณีการใช้งานทั่วไปของcompare_exchange_weak()? คำถามอื่นที่เกี่ยวข้อง ในหนังสือของเขา "C ++ Concurrency …


2
ความเชี่ยวชาญอย่างชัดเจนของฟังก์ชันสมาชิกคลาสเทมเพลต
ฉันต้องการความเชี่ยวชาญในฟังก์ชันสมาชิกเทมเพลตสำหรับบางประเภท (สมมติว่าdouble ) ทำงานได้ดีในขณะที่คลาสXไม่ใช่คลาสเทมเพลต แต่เมื่อฉันสร้างเทมเพลต GCC เริ่มให้ข้อผิดพลาดเวลาคอมไพล์ #include <iostream> #include <cmath> template <class C> class X { public: template <class T> void get_as(); }; template <class C> void X<C>::get_as<double>() { } int main() { X<int> x; x.get_as(); } นี่คือข้อความแสดงข้อผิดพลาด source.cpp:11:27: error: template-id 'get_as<double>' in declaration of primary template source.cpp:11:6: error: …

3
โหลดฟังก์ชันจาก DLL แบบไดนามิก
ฉันดูไฟล์. dll นิดหน่อยฉันเข้าใจการใช้งานและพยายามทำความเข้าใจวิธีใช้ ฉันได้สร้างไฟล์. dll ที่มีฟังก์ชันที่ส่งคืนจำนวนเต็มชื่อ funci () ใช้รหัสนี้ฉัน (คิดว่า) ฉันได้นำเข้าไฟล์. dll เข้าสู่โครงการแล้ว (ไม่มีข้อร้องเรียน): #include <windows.h> #include <iostream> int main() { HINSTANCE hGetProcIDDLL = LoadLibrary("C:\\Documents and Settings\\User\\Desktop \\fgfdg\\dgdg\\test.dll"); if (hGetProcIDDLL == NULL) { std::cout << "cannot locate the .dll file" << std::endl; } else { std::cout << "it has been …
88 c++  winapi  dll 

5
เหตุใดฉันจึงเข้าถึงตัวแปรส่วนตัวในตัวสร้างการคัดลอกได้
ฉันได้เรียนรู้ว่าฉันไม่สามารถเข้าถึงตัวแปรส่วนตัวได้โดยใช้ get-function ในคลาสเท่านั้น แต่ทำไมฉันถึงเข้าถึงได้ในตัวสร้างสำเนา ตัวอย่าง: Field::Field(const Field& f) { pFirst = new T[f.capacity()]; pLast = pFirst + (f.pLast - f.pFirst); pEnd = pFirst + (f.pEnd - f.pFirst); std::copy(f.pFirst, f.pLast, pFirst); } คำประกาศของฉัน: private: T *pFirst,*pLast,*pEnd;

1
การแปลงจาก * มาเป็นฐาน * มีอยู่ แต่ไม่สามารถเข้าถึงได้
เหตุใดโค้ด follwing จึงสร้างข้อผิดพลาดนี้แม้ว่า c จะเป็นโครงสร้างและมีการสืบทอดสาธารณะโดยค่าเริ่มต้น ?? struct c { protected: int i; public: c(int ii=0):i(ii){} virtual c *fun(); }; c* c::fun(){ cout<<"in c"; return &c(); } class d : c { public: d(){} d* fun() { i = 9; cout<<"in d"<<'\t'<<i; return &d(); } }; int main() { c *cc; …
88 c++  inheritance 

6
วิธีเปรียบเทียบพอยน์เตอร์
สมมติว่าฉันมีพอยน์เตอร์ 2 ตัว: int *a = something; int *b = something; ถ้าฉันต้องการเปรียบเทียบพวกเขาและดูว่าพวกเขาชี้ไปที่ที่เดียวกัน (a == b) ได้ผลหรือไม่?
88 c++  pointers 

14
เทคนิคในการปิดบังสตริงที่ละเอียดอ่อนใน C ++
ฉันต้องการจัดเก็บข้อมูลที่ละเอียดอ่อน (คีย์เข้ารหัสแบบสมมาตรที่ฉันต้องการเก็บไว้เป็นส่วนตัว) ในแอปพลิเคชัน C ++ ของฉัน วิธีง่ายๆคือทำสิ่งนี้: std::string myKey = "mysupersupersecretpasswordthatyouwillneverguess"; อย่างไรก็ตามการเรียกใช้แอปพลิเคชันผ่านstringsกระบวนการ (หรืออื่น ๆ ที่แยกสตริงจากแอปไบนารี) จะเปิดเผยสตริงด้านบน ควรใช้เทคนิคใดในการปิดบังข้อมูลที่ละเอียดอ่อนดังกล่าว แก้ไข: โอเคคุณทุกคนบอกว่า"ไฟล์ปฏิบัติการของคุณสามารถย้อนกลับทางวิศวกรรมได้"แน่นอน! นี่เป็นสัตว์เลี้ยงของฉันดังนั้นฉันจะคุยโวสักหน่อยที่นี่: เหตุใด 99% (โอเคดังนั้นบางทีฉันพูดเกินจริงเล็กน้อย) ของคำถามเกี่ยวกับความปลอดภัยทั้งหมดในไซต์นี้ได้รับคำตอบพร้อมกับฝนตกหนักว่า "ไม่มีวิธีที่เป็นไปได้ในการสร้างโปรแกรมที่ปลอดภัยอย่างสมบูรณ์แบบ" ซึ่งไม่เป็นประโยชน์ ตอบ! ความปลอดภัยเป็นระดับเลื่อนระหว่างการใช้งานที่สมบูรณ์แบบและไม่มีการรักษาความปลอดภัยที่ปลายด้านหนึ่งและความปลอดภัยที่สมบูรณ์แบบ แต่ไม่มีการใช้งานที่อื่น ประเด็นคือคุณเลือกตำแหน่งของคุณบนสเกลเลื่อนนั้นขึ้นอยู่กับสิ่งที่คุณพยายามทำและสภาพแวดล้อมที่ซอฟต์แวร์ของคุณจะทำงาน ฉันไม่ได้เขียน app สำหรับการติดตั้งทางทหารผมเขียน app สำหรับคอมพิวเตอร์ที่บ้าน ฉันต้องการเข้ารหัสข้อมูลในเครือข่ายที่ไม่น่าเชื่อถือด้วยคีย์การเข้ารหัสที่รู้จักกันดี ในกรณีเหล่านี้ "การรักษาความปลอดภัยผ่านความสับสน" น่าจะดีพอ! แน่นอนว่าใครบางคนที่มีเวลาพลังงานและทักษะเพียงพอสามารถทำวิศวกรรมย้อนกลับไบนารีและค้นหารหัสผ่านได้ แต่เดาอะไร? ฉันไม่สนใจ: เวลาที่ฉันใช้ในการติดตั้งระบบรักษาความปลอดภัยชั้นยอดนั้นแพงกว่าการสูญเสียยอดขายเนื่องจากเวอร์ชันที่แตก (ไม่ใช่ว่าฉันขายสิ่งนี้จริงๆ แต่คุณเข้าใจ) ท้องฟ้าสีครามนี้ "ให้มันเป็นวิธีที่ดีที่สุดเท่าที่จะเป็นไปได้" แนวโน้มในการเขียนโปรแกรมในหมู่โปรแกรมเมอร์มือใหม่นั้นเป็นเรื่องโง่ที่จะพูดน้อยที่สุด ขอขอบคุณที่สละเวลาตอบคำถามนี้ซึ่งเป็นประโยชน์มากที่สุด น่าเสียดายที่ฉันยอมรับคำตอบได้เพียงคำตอบเดียว …

5
ตัวเลือกลิงค์ที่ถูกต้องในการใช้ std :: thread ใน GCC ภายใต้ linux คืออะไร?
สวัสดีฉันกำลังพยายามใช้std::threadกับ G ++ นี่คือรหัสทดสอบของฉัน #include <thread> #include <iostream> int main(int, char **){ std::thread tt([](){ std::cout<<"Thread!"<<std::endl; }); tt.join(); } มันรวบรวม แต่เมื่อฉันพยายามเรียกใช้ผลลัพธ์คือ: terminate called after throwing an instance of 'std::system_error' what(): Operation not permitted Aborted เวอร์ชันคอมไพเลอร์ของฉัน: $ g++ --version g++ (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1 Copyright (C) 2011 Free Software Foundation, Inc. This is …

5
คำหลักที่ไม่ได้ลงนามใน C ++
คำหลักที่ไม่ได้ลงชื่อเริ่มต้นเป็นชนิดข้อมูลเฉพาะใน C ++ หรือไม่ ฉันกำลังพยายามเขียนฟังก์ชันสำหรับคลาสสำหรับต้นแบบ: unsigned Rotate(unsigned object, int count) แต่ฉันไม่เข้าใจความunsignedหมายจริงๆ มันไม่ควรเหมือนunsigned intหรืออะไร?
88 c++  unsigned 

3
long long int เทียบกับ long int เทียบกับ int64_t ใน C ++
ฉันพบพฤติกรรมแปลก ๆ ในขณะที่ใช้ลักษณะประเภท C ++ และได้ จำกัด ปัญหาของฉันให้แคบลงเหลือเพียงปัญหาเล็ก ๆ น้อย ๆ ที่เล่นโวหารซึ่งฉันจะให้คำอธิบายมากมายเนื่องจากฉันไม่ต้องการปล่อยให้มีการตีความที่ผิด สมมติว่าคุณมีโปรแกรมดังนี้: #include <iostream> #include <cstdint> template <typename T> bool is_int64() { return false; } template <> bool is_int64<int64_t>() { return true; } int main() { std::cout << "int:\t" << is_int64<int>() << std::endl; std::cout << "int64_t:\t" << is_int64<int64_t>() << …
88 c++  gcc  cstdint 

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