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

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

4
แฟล็ก fpermissive ทำอะไร?
ฉันแค่สงสัยว่า-fpermissiveแฟล็กทำอะไรในคอมไพเลอร์ g ++? ฉันได้รับ: ข้อผิดพลาด: การรับที่อยู่ชั่วคราว [-fpermissive] ซึ่งฉันสามารถแก้ปัญหาได้โดยให้ -fpermissiveแฟล็กกับคอมไพเลอร์ แก้ไข : ฉันเพิ่งพบสิ่งที่ทำให้เกิดข้อผิดพลาดที่อยู่ชั่วคราว! ฉันจะแก้ไขส่วนนั้นตอนนี้

2
C ++ แปลงจาก 1 อักขระเป็นสตริง? [ปิด]
คำถามนี้ไม่น่าจะช่วยผู้เยี่ยมชมในอนาคตได้ มีความเกี่ยวข้องกับพื้นที่ทางภูมิศาสตร์ขนาดเล็กช่วงเวลาที่เฉพาะเจาะจงหรือสถานการณ์ที่แคบเป็นพิเศษซึ่งโดยทั่วไปไม่สามารถใช้ได้กับผู้ชมอินเทอร์เน็ตทั่วโลก สำหรับความช่วยเหลือในการทำคำถามนี้มากขึ้นบังคับในวงกว้างไปที่ศูนย์ช่วยเหลือ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันต้องร่าย 1 charถึงstringเท่านั้น str[0]ทางตรงข้ามสวยเรียบง่ายเช่น สิ่งต่อไปนี้ใช้ไม่ได้สำหรับฉัน: char c = 34; string(1,c); //this doesn't work, the string is always empty. string s(c); //also doesn't work. boost::lexical_cast<string>((int)c); //also doesn't work.
121 c++  casting 

21
เหตุใดจึงใช้ศูนย์ที่อยู่สำหรับตัวชี้ค่าว่าง
ใน C (หรือ C ++ สำหรับเรื่องนั้น) พอยน์เตอร์มีความพิเศษหากมีค่าเป็นศูนย์: ฉันขอแนะนำให้ตั้งค่าพอยน์เตอร์เป็นศูนย์หลังจากปลดปล่อยหน่วยความจำเพราะหมายความว่าการปล่อยพอยน์เตอร์อีกครั้งจะไม่เป็นอันตราย เมื่อฉันเรียก malloc มันจะส่งคืนตัวชี้ที่มีค่าเป็นศูนย์หากไม่สามารถรับหน่วยความจำได้ ฉันใช้if (p != 0)เวลาทั้งหมดเพื่อให้แน่ใจว่าพอยน์เตอร์ที่ผ่านนั้นถูกต้อง ฯลฯ แต่เนื่องจากการกำหนดแอดเดรสหน่วยความจำเริ่มต้นที่ 0 จึงไม่ใช่ที่อยู่ที่ถูกต้องเหมือนที่อยู่อื่น ๆ ใช่หรือไม่? 0 จะใช้ในการจัดการตัวชี้ค่าว่างได้อย่างไรหากเป็นเช่นนั้น เหตุใดจำนวนลบจึงไม่เป็นค่าว่างแทน แก้ไข: คำตอบที่ดีมากมาย ฉันจะสรุปสิ่งที่พูดในคำตอบที่แสดงในขณะที่ใจของฉันตีความมันและหวังว่าชุมชนจะแก้ไขฉันหากฉันเข้าใจผิด เช่นเดียวกับสิ่งอื่น ๆ ในการเขียนโปรแกรมมันเป็นนามธรรม เพียงแค่คงไม่เกี่ยวข้องจริงๆที่จะอยู่ 0. C ++ 0x nullptrเน้นนี้โดยการเพิ่มคำหลัก มันไม่ได้เป็นนามธรรมที่อยู่ แต่เป็นค่าคงที่ที่กำหนดโดยมาตรฐาน C และคอมไพเลอร์สามารถแปลเป็นจำนวนอื่นได้ตราบเท่าที่ตรวจสอบให้แน่ใจว่าจะไม่เท่ากับที่อยู่ "จริง" และเท่ากับพอยน์เตอร์ว่างอื่น ๆ หาก 0 ไม่ใช่ คุ้มค่าที่สุดที่จะใช้สำหรับแพลตฟอร์ม ในกรณีที่ไม่ใช่สิ่งที่เป็นนามธรรมซึ่งในช่วงแรก ๆ ระบบจะใช้แอดเดรส …
121 c++  c  memory  pointers 

3
การต่อสตริงมาโคร C / C ++
#define STR1 "s" #define STR2 "1" #define STR3 STR1 ## STR2 เป็นไปได้หรือไม่ที่จะเชื่อมต่อกันโดยมี STR3 == "s1" คุณสามารถทำได้โดยส่ง args ไปยังฟังก์ชัน Macro อื่น แต่มีทางตรงไหม?
121 c++  c  c-preprocessor 

6
เชื่อมต่อตัวอักษรสตริงสองตัว
ฉันกำลังอ่าน Accelerated C ++ โดย Koenig เขาเขียนว่า "แนวคิดใหม่คือเราสามารถใช้ + เพื่อเชื่อมสตริงและสตริงลิเทอรัล - หรือสำหรับสสารนั้นสองสตริง (แต่ไม่ใช่สองสตริงลิเทอรัล) ดีนี่ก็สมเหตุสมผลแล้วที่ฉันคิดว่า ตอนนี้เป็นแบบฝึกหัดสองแบบแยกกันเพื่อให้ความสว่างนี้ คำจำกัดความต่อไปนี้ถูกต้องหรือไม่? const string hello = "Hello"; const string message = hello + ",world" + "!"; ตอนนี้ฉันพยายามดำเนินการข้างต้นแล้วและได้ผล! ฉันก็เลยมีความสุข จากนั้นฉันก็พยายามทำแบบฝึกหัดต่อไป const string exclam = "!"; const string message = "Hello" + ",world" + exclam; สิ่งนี้ไม่ได้ผล ตอนนี้ฉันเข้าใจแล้วว่ามีบางอย่างที่เกี่ยวข้องกับการที่คุณไม่สามารถเชื่อมต่อตัวอักษรสองสตริงได้ แต่ฉันไม่เข้าใจความแตกต่างทางความหมายระหว่างสาเหตุที่ฉันจัดการให้ตัวอย่างแรกทำงานได้ …

4
เทมเพลต <unsigned int N> หมายถึงอะไร
เมื่อประกาศเทมเพลตฉันคุ้นเคยกับการมีรหัสประเภทนี้: template &lt;class T&gt; แต่ในคำถามนี้พวกเขาใช้: template &lt;unsigned int N&gt; ฉันตรวจสอบว่าคอมไพล์ แต่มันหมายความว่าอย่างไร? เป็นพารามิเตอร์ที่ไม่ใช่ประเภทหรือไม่? และถ้าเป็นเช่นนั้นเราจะมีเทมเพลตโดยไม่มีพารามิเตอร์ประเภทใด ๆ ได้อย่างไร?
121 c++  templates 

5
เหตุใด C ++ 11 จึงไม่รองรับรายการ initializer ที่กำหนดเป็น C99 [ปิด]
ปิด . คำถามนี้เป็นคำถามความคิดเห็นตาม ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบได้ด้วยข้อเท็จจริงและการอ้างอิงโดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา ปรับปรุงคำถามนี้ พิจารณา: struct Person { int height; int weight; int age; }; int main() { Person p { .age = 18 }; } รหัสด้านบนถูกต้องตามกฎหมายใน C99 แต่ไม่ถูกกฎหมายใน C ++ 11 สิ่งที่เป็น C ++ 11 เหตุผลของคณะกรรมการมาตรฐานในการยกเว้นการสนับสนุนคุณลักษณะที่มีประโยชน์เช่นนี้หรือไม่?
121 c++  c  c++11  initialization  c99 

2
ตัวดำเนินการมากเกินไป: ฟังก์ชันสมาชิกเทียบกับฟังก์ชันที่ไม่ใช่สมาชิก?
ฉันอ่านว่าโอเปอเรเตอร์โอเวอร์โหลดที่ประกาศว่าเป็นฟังก์ชันสมาชิกนั้นไม่สมมาตรเนื่องจากสามารถมีได้เพียงพารามิเตอร์เดียวและพารามิเตอร์อื่นที่ส่งผ่านโดยอัตโนมัติคือthisตัวชี้ ดังนั้นจึงไม่มีมาตรฐานที่จะเปรียบเทียบได้ ในทางกลับกันโอเปอเรเตอร์ที่โอเวอร์โหลดถูกประกาศว่า a friendเป็นแบบสมมาตรเนื่องจากเราส่งผ่านอาร์กิวเมนต์ประเภทเดียวกันสองอาร์กิวเมนต์ดังนั้นจึงสามารถเปรียบเทียบกันได้ คำถามของฉันคือเมื่อฉันยังสามารถเปรียบเทียบค่าของตัวชี้กับข้อมูลอ้างอิงได้ทำไมเพื่อนถึงชอบ? (การใช้เวอร์ชันอสมมาตรให้ผลลัพธ์เหมือนกับแบบสมมาตร) เหตุใดอัลกอริทึม STL จึงใช้เฉพาะเวอร์ชันสมมาตร

4
ลำดับของตัวสร้างสมาชิกและการเรียกตัวทำลาย
โอ้ผู้เชี่ยวชาญด้าน C ++ ฉันแสวงหาภูมิปัญญาของคุณ พูดมาตรฐานกับฉันและบอกว่า C ++ รับประกันว่าโปรแกรมต่อไปนี้: #include &lt;iostream&gt; using namespace std; struct A { A() { cout &lt;&lt; "A::A" &lt;&lt; endl; } ~A() { cout &lt;&lt; "A::~" &lt;&lt; endl; } }; struct B { B() { cout &lt;&lt; "B::B" &lt;&lt; endl; } ~B() { cout &lt;&lt; "B::~" &lt;&lt; …
121 c++ 

22
ตำแหน่งของบิตที่มีนัยสำคัญน้อยที่สุดที่ตั้งค่าไว้
ฉันกำลังมองหาวิธีที่มีประสิทธิภาพในการกำหนดตำแหน่งของบิตที่มีนัยสำคัญน้อยที่สุดที่กำหนดเป็นจำนวนเต็มเช่นสำหรับ 0x0FF0 ซึ่งจะเป็น 4 การใช้งานที่ไม่สำคัญคือ: unsigned GetLowestBitPos(unsigned value) { assert(value != 0); // handled separately unsigned pos = 0; while (!(value &amp; 1)) { value &gt;&gt;= 1; ++pos; } return pos; } มีความคิดอย่างไรที่จะบีบบางรอบออกจากมัน? (หมายเหตุ: คำถามนี้มีไว้สำหรับคนที่ชอบสิ่งนั้นไม่ใช่สำหรับคนที่บอกว่า xyzoptimization นั้นชั่วร้าย) [แก้ไข] ขอบคุณทุกคนสำหรับแนวคิด! ฉันได้เรียนรู้สิ่งอื่น ๆ ด้วยเช่นกัน เย็น!

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

6
ฉันจะเขียนลิเทอรัลสั้น ๆ ใน C ++ ได้อย่างไร
คำถามพื้นฐานมาก: ฉันจะเขียนshortตัวอักษรใน C ++ ได้อย่างไร ฉันรู้สิ่งต่อไปนี้: 2 เป็น int 2U เป็น unsigned int 2L คือ long 2LL คือ long long 2.0f คือ float 2.0 คือ double '\2'คือchar. แต่ฉันจะเขียนshortตัวอักษรได้อย่างไร? ฉันลองแล้ว2Sแต่นั่นทำให้คอมไพเลอร์เตือน
120 c++  literals 

2
เมื่อใดที่การเรียกใช้ฟังก์ชันสมาชิกบนอินสแตนซ์ว่างจะทำให้เกิดพฤติกรรมที่ไม่ได้กำหนด
พิจารณารหัสต่อไปนี้: #include &lt;iostream&gt; struct foo { // (a): void bar() { std::cout &lt;&lt; "gman was here" &lt;&lt; std::endl; } // (b): void baz() { x = 5; } int x; }; int main() { foo* f = 0; f-&gt;bar(); // (a) f-&gt;baz(); // (b) } เราคาดว่า(b)จะขัดข้องเนื่องจากไม่มีสมาชิกที่เกี่ยวข้องxสำหรับตัวชี้ค่าว่าง ในทางปฏิบัติ(a)ไม่ผิดพลาดเนื่องจากthisไม่เคยใช้ตัวชี้ เนื่องจาก(b)dereferences thisตัวชี้ ( …

9
int และ long ใน C ++ ต่างกันอย่างไร
แก้ไขฉันถ้าฉันผิด int คือ 4 ไบต์โดยมีช่วงของค่าตั้งแต่ -2,147,483,648 ถึง 2,147,483,647 (2 ^ 31) long คือ 4 ไบต์โดยมีช่วงของค่าตั้งแต่ -2,147,483,648 ถึง 2,147,483,647 (2 ^ 31) C ++ แตกต่างกันอย่างไร? สามารถใช้แทนกันได้หรือไม่?
120 c++  variables 


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