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

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

5
std :: next_permutation คำอธิบายการนำไปใช้งาน
ฉันอยากรู้ว่าstd:next_permutationมีการใช้งานอย่างไรดังนั้นฉันจึงแยกgnu libstdc++ 4.7เวอร์ชันและทำความสะอาดตัวระบุและการจัดรูปแบบเพื่อสร้างการสาธิตต่อไปนี้ ... #include <vector> #include <iostream> #include <algorithm> using namespace std; template<typename It> bool next_permutation(It begin, It end) { if (begin == end) return false; It i = begin; ++i; if (i == end) return false; i = end; --i; while (true) { It j = i; --i; …

15
ใช้ std Namespace
ดูเหมือนจะมีมุมมองที่แตกต่างกันในการใช้ "การใช้" ที่เกี่ยวกับเนมสเปซมาตรฐาน บางคนบอกว่าใช้ ' using namespace std' อีกคนบอกว่าอย่า แต่ใช้คำนำหน้าฟังก์ชัน std ที่จะใช้กับ ' std::' ในขณะที่คนอื่นบอกว่าให้ใช้สิ่งนี้: using std::string; using std::cout; using std::cin; using std::endl; using std::vector; สำหรับฟังก์ชันมาตรฐานทั้งหมดที่จะใช้ ข้อดีข้อเสียของแต่ละข้อคืออะไร?
110 c++  namespaces 

12
ฟังก์ชันเสมือนจริงและ vtable ใช้งานอย่างไร
เราทุกคนรู้ว่าฟังก์ชันเสมือนจริงคืออะไรใน C ++ แต่จะใช้งานในระดับลึกได้อย่างไร vtable สามารถแก้ไขหรือเข้าถึงได้โดยตรงที่รันไทม์? vtable มีอยู่สำหรับทุกคลาสหรือเฉพาะที่มีฟังก์ชันเสมือนอย่างน้อยหนึ่งฟังก์ชัน? คลาสนามธรรมมีค่า NULL สำหรับตัวชี้ฟังก์ชันอย่างน้อยหนึ่งรายการหรือไม่? การมีฟังก์ชันเสมือนเดียวทำให้ทั้งชั้นเรียนช้าลงหรือไม่? หรือเฉพาะการเรียกใช้ฟังก์ชันที่เสมือนจริง? และความเร็วจะได้รับผลกระทบหรือไม่หากฟังก์ชันเสมือนถูกเขียนทับจริงหรือไม่หรือจะไม่มีผลตราบใดที่เป็นเสมือน

3
แทนที่แฟล็กคอมไพล์สำหรับไฟล์เดี่ยว
ฉันต้องการใช้ชุดค่าสถานะส่วนกลางสำหรับการรวบรวมโปรเจ็กต์ซึ่งหมายความว่าที่ไฟล์ CMakeLists.txt ระดับบนสุดของฉันฉันได้ระบุ: ADD_DEFINITIONS ( -Wall -Weffc++ -pedantic -std=c++0x ) อย่างไรก็ตามสำหรับไฟล์เฉพาะ (สมมติว่า "foo.cpp") ในไดเร็กทอรีย่อยฉันต้องการเปลี่ยนแฟล็กคอมไพล์ไม่ให้ใช้ -Weffc ++ (รวมไลบรารีเชิงพาณิชย์ที่ฉันไม่สามารถเปลี่ยนแปลงได้) เพื่อลดความซับซ้อนของสถานการณ์ให้ใช้ -Wall เท่านั้นฉันพยายาม: SET_SOURCE_FILES_PROPERTIES( foo.cpp PROPERTIES COMPILE_FLAGS -Wall ) ADD_EXECUTABLE( foo foo.cpp ) ซึ่งไม่ได้ผล ฉันยังพยายาม SET_PROPERTY( SOURCE foo.cpp PROPERTY COMPILE_FLAGS -Wall ) ADD_EXECUTABLE( foo foo.cpp ) และ ADD_EXECUTABLE( foo foo.cpp ) SET_TARGET_PROPERTIES( foo …

12
const char * const กับ const char *?
ฉันกำลังใช้โปรแกรมตัวอย่างเพื่อทำความคุ้นเคยกับ C ++ อีกครั้งและฉันได้พบกับคำถามต่อไปนี้ ขั้นแรกนี่คือรหัสตัวอย่าง: void print_string(const char * the_string) { cout << the_string << endl; } int main () { print_string("What's up?"); } ในโค้ดข้างต้นพารามิเตอร์ที่จะ print_string const char * const the_stringจะได้รับแทน แบบไหนจะถูกต้องกว่ากัน? ฉันเข้าใจว่าความแตกต่างคือตัวชี้ไปยังอักขระคงที่ในขณะที่อีกตัวหนึ่งเป็นตัวชี้ค่าคงที่ไปยังอักขระคงที่ แต่ทำไมทั้งสองงานนี้ จะเกี่ยวข้องเมื่อใด
110 c++  c 

4
ค่าคงที่ของ C / C ++ NaN (ตามตัวอักษร)?
เป็นไปได้ไหมที่จะกำหนด a NaNให้กับ a doubleหรือfloatใน C / C ++ เช่นเดียวกับใน JavaScript ที่คุณทำ: a = NaN. คุณสามารถตรวจสอบได้ในภายหลังว่าตัวแปรเป็นตัวเลขหรือไม่
110 c++  nan 

4
uint_fast32_t คืออะไรและเหตุใดจึงควรใช้แทน int ปกติและ uint32_t
ดังนั้นเหตุผลสำหรับtypedef: ประเภทข้อมูลดั้งเดิมของ ed คือการแสดงนามธรรมระดับต่ำและทำให้เข้าใจง่ายขึ้น ( uint64_tแทนที่จะเป็นlong longประเภทซึ่งมีขนาด 8 ไบต์) อย่างไรก็ตามมีuint_fast32_tซึ่งมีเดียวกันเป็นtypedef uint32_tการใช้เวอร์ชัน "เร็ว" จะทำให้โปรแกรมเร็วขึ้นหรือไม่?
110 c++  c  types 

10
เหตุใดการหารสอง int จึงไม่ให้ค่าที่เหมาะสมเมื่อกำหนดให้เป็นสองเท่า
เป็นอย่างไรบ้างในตัวอย่างต่อไปนี้ int a = 7; int b = 3; double c = 0; c = a / b; cลงเอยด้วยค่า 2 แทนที่จะเป็น 2.3333 อย่างที่คาดหวัง ถ้าaและbเป็นสองเท่าคำตอบจะเปลี่ยนเป็น 2.333 แต่แน่นอนเพราะc มันเป็นสองเท่ามันควรจะทำงานร่วมกับจำนวนเต็ม? แล้วทำไมถึงint/int=doubleไม่ได้ผล?

9
ฉันจะหาอัลกอริธึมการค้นหาไบนารี C ++ ที่“ มีประโยชน์” ได้จากที่ใด
ฉันต้องการอัลกอริทึมการค้นหาแบบไบนารีที่เข้ากันได้กับคอนเทนเนอร์ C ++ STL บางอย่างเช่นstd::binary_searchใน<algorithm>ส่วนหัวของไลบรารีมาตรฐานแต่ฉันต้องการให้มันส่งคืนตัววนซ้ำที่ชี้ไปที่ผลลัพธ์ไม่ใช่บูลีนธรรมดาที่บอกฉันว่ามีองค์ประกอบอยู่หรือไม่ (โปรดทราบว่าคณะกรรมการมาตรฐานคิดอะไรอยู่เมื่อพวกเขากำหนด API สำหรับ binary_search!) ข้อกังวลหลักของฉันที่นี่คือฉันต้องการความเร็วของการค้นหาแบบไบนารีดังนั้นแม้ว่าฉันจะสามารถค้นหาข้อมูลด้วยอัลกอริทึมอื่น ๆ ดังที่ได้กล่าวไว้ด้านล่าง แต่ฉันต้องการใช้ประโยชน์จากข้อเท็จจริงที่ว่าข้อมูลของฉันถูกจัดเรียงเพื่อให้ได้ประโยชน์จากไบนารี ค้นหาไม่ใช่การค้นหาเชิงเส้น จนถึงตอนนี้lower_boundและupper_boundล้มเหลวหากไม่มีข้อมูล: //lousy pseudo code vector(1,2,3,4,6,7,8,9,0) //notice no 5 iter = lower_bound_or_upper_bound(start,end,5) iter != 5 && iter !=end //not returning end as usual, instead it'll return 4 or 6 หมายเหตุ:ฉันยังใช้อัลกอริทึมที่ไม่ได้เป็นของเนมสเปซมาตรฐานตราบใดที่เข้ากันได้กับคอนเทนเนอร์ ชอบพูดboost::binary_search.

10
เหตุใด std :: min จึงล้มเหลวเมื่อรวม windows.h
#include <algorithm> #include <Windows.h> int main() { int k = std::min(3, 4); return 0; } windows กำลังทำอะไรถ้าฉันรวม Windows.h? ฉันไม่สามารถใช้std::minใน Visual Studio 2005 ข้อความแสดงข้อผิดพลาดคือ: error C2589: '(' : illegal token on right side of '::' error C2059: syntax error : '::'

8
วิธีที่มีประสิทธิภาพในการคืนค่า std :: vector ใน c ++
จำนวนข้อมูลที่ถูกคัดลอกเมื่อส่งคืน std :: vector ในฟังก์ชันและการเพิ่มประสิทธิภาพนั้นจะใหญ่เพียงใดในการวาง std :: vector ใน free-store (บน heap) และส่งกลับตัวชี้แทนนั่นคือ: std::vector *f() { std::vector *result = new std::vector(); /* Insert elements into result */ return result; } มีประสิทธิภาพมากกว่า: std::vector f() { std::vector result; /* Insert elements into result */ return result; } เหรอ?

8
Qt: ไม่พบข้อผิดพลาด -lGL
ฉันเพิ่งติดตั้ง QtCreator ใหม่สร้างโครงการใหม่ ( แอปพลิเคชัน Qt ) ซึ่งได้รับสิ่งนี้หลังจากการรวบรวม: /usr/bin/ld: **cannot find -lGL** collect2: error: ld returned 1 exit status make: *** [untitled1] Error 1 18:07:41: The process "/usr/bin/make" exited with code 2. Error while building/deploying project untitled1 (kit: Desktop Qt 5.1.0 GCC 32bit) When executing step 'Make' ( โครงการว่างเปล่าฉันไม่ได้ทำการเปลี่ยนแปลงใด ๆ …

18
strlen จะถูกคำนวณหลายครั้งหากใช้ในเงื่อนไขการวนซ้ำ?
ฉันไม่แน่ใจว่าโค้ดต่อไปนี้อาจทำให้เกิดการคำนวณซ้ำซ้อนหรือเป็นรหัสเฉพาะของคอมไพเลอร์ for (int i = 0; i < strlen(ss); ++i) { // blabla } จะstrlen()คำนวณทุกครั้งเมื่อiเพิ่มขึ้น?
109 c++  c  gcc  optimization  strlen 

7
ข้อยกเว้นทำงานอย่างไร (เบื้องหลัง) ใน c ++
ฉันมักจะเห็นคนพูดว่าข้อยกเว้นนั้นช้า แต่ฉันไม่เคยเห็นข้อพิสูจน์ใด ๆ ดังนั้นแทนที่จะถามว่าพวกเขาเป็นอย่างไรฉันจะถามว่าข้อยกเว้นทำงานอย่างไรในเบื้องหลังดังนั้นฉันจึงสามารถตัดสินใจได้ว่าจะใช้เมื่อใดและจะช้าหรือไม่ จากสิ่งที่ฉันรู้ข้อยกเว้นจะเหมือนกับการส่งคืนหลายครั้งยกเว้นว่าจะตรวจสอบหลังจากการส่งคืนแต่ละครั้งว่าจำเป็นต้องทำอย่างอื่นหรือหยุด จะตรวจสอบได้อย่างไรว่าจะหยุดกลับเมื่อใด ฉันเดาว่ามีกองที่สองที่เก็บประเภทของข้อยกเว้นและตำแหน่งสแต็กจากนั้นจะส่งคืนจนกว่าจะถึงที่นั่น ฉันคาดเดาด้วยว่าครั้งเดียวที่สัมผัสกองที่สองนี้คือการโยนและในการลอง / จับแต่ละครั้ง AFAICT การใช้ลักษณะการทำงานที่คล้ายกันกับรหัสส่งคืนจะใช้เวลาเท่ากัน แต่ทั้งหมดนี้เป็นเพียงการคาดเดาดังนั้นฉันจึงอยากรู้ว่าเกิดอะไรขึ้น ข้อยกเว้นทำงานอย่างไร

4
อะไรคือการหารจำนวนเต็มที่เร็วที่สุดที่รองรับการหารด้วยศูนย์ไม่ว่าผลลัพธ์จะเป็นอย่างไร
สรุป: ฉันกำลังมองหาวิธีที่เร็วที่สุดในการคำนวณ (int) x / (int) y y==0โดยไม่ได้รับข้อยกเว้นสำหรับ แต่ฉันแค่ต้องการผลลัพธ์ตามอำเภอใจ พื้นหลัง: เมื่อทำการเข้ารหัสอัลกอริทึมการประมวลผลภาพฉันมักจะต้องหารด้วยค่าอัลฟา (สะสม) ตัวแปรที่ง่ายที่สุดคือรหัส C ธรรมดาที่มีเลขคณิตจำนวนเต็ม ปัญหาของฉันคือฉันมักจะได้รับข้อผิดพลาดการหารด้วยศูนย์สำหรับพิกเซลผลลัพธ์ด้วยalpha==0. อย่างไรก็ตามเรื่องนี้จะตรงพิกเซลที่ผลที่ไม่ได้เรื่องที่ทั้งหมด: alpha==0ฉันไม่สนใจเกี่ยวกับค่าสีของพิกเซลพร้อม รายละเอียด: ฉันกำลังมองหาสิ่งที่ต้องการ: result = (y==0)? 0 : x/y; หรือ result = x / MAX( y, 1 ); x และ y เป็นจำนวนเต็มบวก รหัสถูกเรียกใช้งานเป็นจำนวนมากในลูปที่ซ้อนกันดังนั้นฉันจึงกำลังมองหาวิธีกำจัดการแตกกิ่งก้านตามเงื่อนไข เมื่อ y ไม่เกินช่วงไบต์ฉันพอใจกับวิธีแก้ปัญหา unsigned char kill_zero_table[256] = { 1, 1, …

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