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

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

5
ความสับสนในการแปลง stringstream, string และ char *
คำถามของฉันสามารถต้มลงไปที่ใดสตริงกลับมาจากการstringstream.str().c_str()มีชีวิตอยู่ในความทรงจำและทำไมไม่สามารถที่จะได้รับมอบหมายให้const char*? ตัวอย่างโค้ดนี้จะอธิบายได้ดีกว่าที่ฉันสามารถทำได้ #include <string> #include <sstream> #include <iostream> using namespace std; int main() { stringstream ss("this is a string\n"); string str(ss.str()); const char* cstr1 = str.c_str(); const char* cstr2 = ss.str().c_str(); cout << cstr1 // Prints correctly << cstr2; // ERROR, prints out garbage system("PAUSE"); return 0; } การสันนิษฐานที่stringstream.str().c_str()สามารถมอบหมายให้const …

7
ฉันจะระบุพา ธ [DllImport] ที่รันไทม์ได้อย่างไร
ในความเป็นจริงฉันมี C ++ (ทำงาน) DLL ที่ฉันต้องการนำเข้าสู่โปรเจ็กต์ C # ของฉันเพื่อเรียกใช้ฟังก์ชั่น มันจะทำงานเมื่อฉันระบุเส้นทางแบบเต็มไปยัง DLL เช่นนี้ string str = "C:\\Users\\userName\\AppData\\Local\\myLibFolder\\myDLL.dll"; [DllImport(str, CallingConvention = CallingConvention.Cdecl)] public static extern int DLLFunction(int Number1, int Number2); ปัญหาคือมันจะเป็นโครงการที่ติดตั้งได้ดังนั้นโฟลเดอร์ของผู้ใช้จะไม่เหมือนเดิม (เช่น: pierre, paul, jack, mum, dad, ... ) ขึ้นอยู่กับคอมพิวเตอร์ / เซสชันที่ต้องการเปิดใช้งาน ดังนั้นฉันต้องการรหัสของฉันจะเป็นทั่วไปเล็กน้อยเช่นนี้ /* goes right to the temp folder of the …
141 c#  c++  dll  constants  dllimport 

3
ฉันควรผ่านฟังก์ชั่น std :: โดยการอ้างอิง const หรือไม่
สมมติว่าฉันมีฟังก์ชั่นที่ใช้std::function: void callFunction(std::function<void()> x) { x(); } ฉันควรผ่านxการอ้างอิง const แทนไหม: void callFunction(const std::function<void()>& x) { x(); } คำตอบของคำถามนี้เปลี่ยนไปตามฟังก์ชั่นนี้หรือไม่? ตัวอย่างเช่นถ้ามันเป็นฟังก์ชั่นสมาชิกระดับหรือคอนสตรัคที่เก็บหรือเริ่มต้นstd::functionเป็นตัวแปรสมาชิก
141 c++  function  reference 

7
ตัวดำเนินการเชิงตรรกะที่ลัดวงจรได้รับคำสั่งหรือไม่? และลำดับการประเมินผล?
มาตรฐาน ANSI กำหนดให้ตัวดำเนินการเชิงตรรกะต้องทำการลัดวงจรใน C หรือ C ++ หรือไม่? ฉันสับสนเพราะฉันจำได้ว่าหนังสือ K&R บอกว่ารหัสของคุณไม่ควรขึ้นอยู่กับการดำเนินการเหล่านี้เพราะไฟฟ้าลัดวงจรเพราะอาจไม่ได้ ใครช่วยกรุณาชี้ให้เห็นว่าในมาตรฐานมันกล่าวว่าตรรกะ ops จะลัดวงจรเสมอ? ฉันสนใจ C ++ เป็นส่วนใหญ่คำตอบสำหรับ C ก็ยอดเยี่ยมเช่นกัน ฉันยังจำการอ่าน (จำไม่ได้ว่าอยู่ที่ไหน) ลำดับการประเมินนั้นไม่ได้ถูกกำหนดอย่างเข้มงวดดังนั้นโค้ดของคุณไม่ควรขึ้นอยู่กับหรือฟังก์ชั่นภายในนิพจน์จะถูกดำเนินการตามลำดับเฉพาะ: ในตอนท้ายของคำสั่ง จะได้รับการเรียก แต่คอมไพเลอร์มีอิสระในการเลือกคำสั่งที่มีประสิทธิภาพที่สุด มาตรฐานระบุลำดับการประเมินผลของนิพจน์นี้หรือไม่ if( functionA() && functionB() && functionC() ) cout<<"Hello world";


16
สมาชิกเสมือนแบบ C ++ คงที่?
เป็นไปได้ใน C ++ ที่จะมีฟังก์ชั่นสมาชิกที่มีทั้งstaticและvirtual? เห็นได้ชัดว่าไม่มีวิธีที่ตรงไปตรงมาที่จะทำมัน ( static virtual member();เป็นข้อผิดพลาดในการคอมไพล์) แต่อย่างน้อยก็มีวิธีที่จะบรรลุผลเช่นเดียวกันหรือไม่? IE: struct Object { struct TypeInformation; static virtual const TypeInformation &GetTypeInformation() const; }; struct SomeObject : public Object { static virtual const TypeInformation &GetTypeInformation() const; }; มันสมเหตุสมผลที่จะใช้GetTypeInformation()ทั้งในอินสแตนซ์ ( object->GetTypeInformation()) และคลาส ( SomeObject::GetTypeInformation()) ซึ่งอาจมีประโยชน์สำหรับการเปรียบเทียบและจำเป็นสำหรับเทมเพลต วิธีเดียวที่ฉันนึกถึงเกี่ยวข้องกับการเขียนสองฟังก์ชั่น / ฟังก์ชั่นและค่าคงที่ต่อคลาสหรือใช้มาโคร ทางออกอื่น ๆ
140 c++  static  virtual 

2
#pragma เป็นส่วนหนึ่งของมาตรฐาน C ++ 11 หรือไม่
ตามเนื้อผ้าวิธีมาตรฐานและแบบพกพาเพื่อหลีกเลี่ยงการรวมส่วนหัวหลายรายการใน C ++ คือ / คือการใช้#ifndef - #define - #endifชุดรูปแบบคำสั่ง pre-compiler หรือที่เรียกว่าชุดรูปแบบมหภาคการ์ด (ดูตัวอย่างรหัสด้านล่าง) #ifndef MY_HEADER_HPP #define MY_HEADER_HPP ... #endif ในการใช้งานมากที่สุด / คอมไพเลอร์ (ดูภาพด้านล่าง) แต่มีอีกทางเลือก "สง่างาม" #pragma onceที่ทำหน้าที่วัตถุประสงค์เช่นเดียวกับโครงการแมโครยามที่เรียกว่า #pragma onceมีข้อดีหลายประการเมื่อเทียบกับชุดรูปแบบการป้องกันมาโครซึ่งรวมถึงรหัสน้อยกว่าการหลีกเลี่ยงการปะทะกันของชื่อและบางครั้งการปรับปรุงความเร็วในการคอมไพล์ ฉันทำการวิจัยบางอย่างฉันรู้ว่าถึงแม้#pragma onceคำสั่งจะได้รับการสนับสนุนจากคอมไพเลอร์ที่รู้จักกันเกือบทั้งหมด แต่ก็มีความขุ่นเคืองว่า#pragma onceคำสั่งนั้นเป็นส่วนหนึ่งของมาตรฐาน C ++ 11 หรือไม่ คำถาม: บางคนสามารถอธิบายได้ว่า#pragma onceคำสั่งนั้นเป็นส่วนหนึ่งของมาตรฐาน C ++ 11 หรือไม่? หากไม่ได้เป็นส่วนหนึ่งของมาตรฐาน C ++ 11 มีแผนใดบ้างในการรวมไว้ในรุ่นที่ใหม่กว่า (เช่น …

30
java.lang.ClassNotFoundException: ไม่พบคลาสบนเส้นทาง: dexpathlist
ขณะนี้ฉันกำลังทำงานในโครงการที่ฉันต้องใช้ ndk ดั้งเดิม มันทำงานได้เมื่อฉันลองใช้ตัวอย่าง helloworld จากแหล่งเครื่องยนต์ของ Irrlicht จากนั้นฉันลองใช้มันในโครงการของฉันตามรูปแบบเดียวกันของตัวอย่างนั้น แต่ฉันได้: 03-14 01:40:05.308: E/AndroidRuntime(799): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.irrlicht.example1/android.app.POMActivity}: java.lang.ClassNotFoundException: Didn't find class "android.app.POMActivity" on path: DexPathList[[zip file "/data/app/com.irrlicht.example1-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.irrlicht.example1-2, /system/lib]] ในขณะที่เรียกใช้โครงการของฉัน นี่คือไฟล์ main.cpp ของฉัน: #include <android/log.h> #include <jni.h> #include <android_native_app_glue.h> #include "android_tools.h" #ifdef _IRR_ANDROID_PLATFORM_ void android_main(android_app* app) { __android_log_print(4 , "pom" …
140 java  android  c++  android-ndk 

3
ตัวจัดการ iomanip ใดที่ 'เหนียว'?
ฉันเพิ่งมีปัญหาในการสร้างstringstreamอันเนื่องมาจากความจริงที่ว่าฉันคิดว่าไม่ถูกต้องstd::setw()จะส่งผลกระทบต่อสายน้ำสำหรับการแทรกทุกครั้งจนกว่าฉันจะเปลี่ยนมันอย่างชัดเจน อย่างไรก็ตามจะไม่มีการตั้งค่าเสมอหลังจากการแทรก // With timestruct with value of 'Oct 7 9:04 AM' std::stringstream ss; ss.fill('0'); ss.setf(ios::right, ios::adjustfield); ss << setw(2) << timestruct.tm_mday; ss << timestruct.tm_hour; ss << timestruct.tm_min; std::string filingTime = ss.str(); // BAD: '0794' ดังนั้นฉันมีคำถามจำนวนมาก: ทำไมจึงเป็นsetw()เช่นนี้? มีผู้ควบคุมอื่น ๆ ด้วยวิธีนี้หรือไม่? มีความแตกต่างในพฤติกรรมระหว่างstd::ios_base::width()และstd::setw()? ในที่สุดก็มีการอ้างอิงออนไลน์ที่ชัดเจนเอกสารพฤติกรรมนี้ เอกสารผู้ขายของฉัน (MS Visual Studio 2005) ดูเหมือนจะไม่แสดงสิ่งนี้อย่างชัดเจน
140 c++  c++-faq 


5
เมื่อใดที่ฉันควรใช้ std :: thread :: detach
บางครั้งฉันต้องใช้std::threadเพื่อเร่งความเร็วการสมัครของฉัน ฉันก็รู้เช่นกันjoin()รอจนกว่าเธรดจะเสร็จสมบูรณ์ สิ่งนี้ง่ายต่อการเข้าใจ แต่ความแตกต่างระหว่างการโทรdetach()และไม่เรียกมันคืออะไร ฉันคิดว่าไม่มีdetach()วิธีของเธรดจะทำงานโดยใช้เธรดอย่างอิสระ ไม่ถอด: void Someclass::Somefunction() { //... std::thread t([ ] { printf("thread called without detach"); }); //some code here } การโทรด้วยการถอดออก: void Someclass::Somefunction() { //... std::thread t([ ] { printf("thread called with detach"); }); t.detach(); //some code here }
140 c++  c++11  stdthread 

8
วัตถุประสงค์ของการใช้ -pedantic ในคอมไพเลอร์ GCC / G ++ คืออะไร?
หมายเหตุนี้ระบุว่า: -ansi: บอกให้คอมไพเลอร์ใช้ตัวเลือกภาษา ANSI สิ่งนี้จะปิด "คุณลักษณะ" บางอย่างของ GCC ซึ่งเข้ากันไม่ได้กับมาตรฐาน ANSI -pedantic: ใช้ร่วมกับ-ansiสิ่งนี้บอกให้คอมไพลเลอร์ปฏิบัติตามมาตรฐาน ANSI อย่างเคร่งครัดโดยปฏิเสธรหัสใด ๆ ที่ไม่เป็นไปตามข้อกำหนด สิ่งแรกแรก: วัตถุประสงค์ของการคืออะไร-pedanticและ-ansiตัวเลือกของคอมไพเลอร์ GCC / G ++ (ผมไม่เข้าใจคำอธิบายข้างต้น)? ใครช่วยบอกฉันถึงสถานการณ์ที่เหมาะสมในการใช้สองตัวเลือกนี้ ฉันควรใช้เมื่อใด มีความสำคัญหรือไม่?
140 c++  c  gcc  g++ 

24
ทำไมชื่อตัวแปรเริ่มต้นด้วยตัวเลขไม่ได้?
ฉันทำงานกับนักพัฒนา C ++ รายใหม่เมื่อเขาถามคำถาม: "ทำไมชื่อตัวแปรไม่สามารถขึ้นต้นด้วยตัวเลข" ฉันไม่สามารถหาคำตอบได้ยกเว้นว่าตัวเลขบางตัวสามารถมีข้อความอยู่ในนั้น (123456L, 123456U) และจะเป็นไปไม่ได้หากคอมไพเลอร์คิดทุกอย่างด้วยอักขระอัลฟ่าจำนวนหนึ่งเป็นชื่อตัวแปร นั่นคือคำตอบที่ถูกต้องหรือไม่? มีเหตุผลอะไรอีกไหม? string 2BeOrNot2Be = "that is the question"; // Why won't this compile?


12
ความสามารถใหม่อะไรที่ตัวอักษรที่ผู้ใช้กำหนดเองเพิ่มไว้ใน C ++
C ++ 11เปิดตัวอักษรที่ผู้ใช้กำหนดซึ่งจะช่วยให้การแนะนำของไวยากรณ์ตัวอักษรใหม่บนพื้นฐานของตัวอักษรที่มีอยู่ ( int, hex, string, float) เพื่อให้ใช้วิธีใดจะสามารถที่จะมีการนำเสนอที่แท้จริง ตัวอย่าง: // imaginary numbers std::complex<long double> operator "" _i(long double d) // cooked form { return std::complex<long double>(0, d); } auto val = 3.14_i; // val = complex<long double>(0, 3.14) // binary values int operator "" _B(const char*); // raw form …

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