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

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

6
ต้องการตัววนซ้ำเมื่อใช้ ranged-based สำหรับลูป
ขณะนี้ฉันสามารถทำลูปตามระยะห่างได้เท่านั้น: for (auto& value : values) แต่บางครั้งฉันต้องการตัววนซ้ำค่าแทนการอ้างอิง (ไม่ว่าด้วยเหตุผลใดก็ตาม) มีวิธีใดบ้างที่ไม่ต้องผ่านเวกเตอร์เปรียบเทียบค่าทั้งหมด?
85 c++  c++11  for-loop  iterator 

1
C ++ 11 make_pair พร้อมพารามิเตอร์เทมเพลตที่ระบุจะไม่คอมไพล์
ฉันเพิ่งเล่นกับ g ++ 4.7 (หนึ่งในสแน็ปช็อตในภายหลัง) ที่เปิดใช้งาน -std = c ++ 11 ฉันพยายามรวบรวมฐานรหัสที่มีอยู่บางส่วนและมีกรณีหนึ่งที่ล้มเหลวค่อนข้างทำให้ฉันสับสน ฉันจะขอบคุณถ้ามีใครสามารถอธิบายสิ่งที่เกิดขึ้นได้ นี่คือรหัส: #include <utility> #include <iostream> #include <vector> #include <string> int main ( ) { std::string s = "abc"; // 1 ok std::pair < std::string, int > a = std::make_pair ( s, 7 ); // 2 error on …

10
มีวิธีที่สวยงามและรวดเร็วในการทดสอบให้ 1 บิตในจำนวนเต็มอยู่ในพื้นที่ที่ติดกันหรือไม่?
ฉันต้องการทดสอบว่าตำแหน่ง (จาก 0 ถึง 31 สำหรับจำนวนเต็ม 32 บิต) ที่มีค่าบิต 1 เป็นพื้นที่ที่ต่อเนื่องกันหรือไม่ ตัวอย่างเช่น: 00111111000000000000000000000000 is contiguous 00111111000000000000000011000000 is not contiguous ฉันต้องการให้การทดสอบนี้คือฟังก์ชันบางอย่างhas_contiguous_one_bits(int)เป็นแบบพกพา วิธีหนึ่งที่ชัดเจนคือการวนซ้ำตำแหน่งเพื่อค้นหาบิตเซ็ตแรกจากนั้นบิตแรกที่ไม่ได้ตั้งค่าและตรวจสอบบิตที่กำหนดเพิ่มเติม ฉันสงสัยว่ามีวิธีที่เร็วกว่านี้หรือไม่? หากมีวิธีการที่รวดเร็วในการค้นหาบิตชุดสูงสุดและต่ำสุด (แต่จากคำถามนี้ดูเหมือนว่าไม่มีแบบพกพา) การใช้งานที่เป็นไปได้คือ bool has_contiguous_one_bits(int val) { auto h = highest_set_bit(val); auto l = lowest_set_bit(val); return val == (((1 << (h-l+1))-1)<<l); } เพื่อความสนุกสนานนี่คือ 100 จำนวนเต็มแรกที่มีบิตต่อเนื่องกัน: 0 1 2 …

11
x + = เร็วกว่า x = x + a หรือไม่?
ฉันกำลังอ่าน "The C ++ Programming Language" ของ Stroustrup ซึ่งเขาบอกว่าจากสองวิธีในการเพิ่มบางสิ่งลงในตัวแปร x = x + a; และ x += a; เขาชอบ+=เพราะมันน่าจะดีกว่า ฉันคิดว่าเขาหมายความว่ามันทำงานได้เร็วขึ้นด้วย แต่มันจริงเหรอ? ถ้ามันขึ้นอยู่กับคอมไพเลอร์และสิ่งอื่น ๆ ฉันจะตรวจสอบได้อย่างไร?

4
การเชื่อมสตริงไม่ทำงานตามที่คาดไว้ [ปิด]
มันยากที่จะบอกว่ากำลังถามอะไรที่นี่ คำถามนี้คลุมเครือคลุมเครือไม่สมบูรณ์กว้างเกินไปหรือมีวาทศิลป์และไม่สามารถตอบได้อย่างสมเหตุสมผลในรูปแบบปัจจุบัน สำหรับความช่วยเหลือในการทำความเข้าใจคำถามนี้เพื่อที่จะสามารถเปิด, ไปที่ศูนย์ช่วยเหลือ ปิดให้บริการใน8 ปีที่ผ่านมา ฉันรู้ว่ามันเป็นปัญหาทั่วไป แต่กำลังมองหาข้อมูลอ้างอิงและข้อมูลอื่น ๆ ฉันไม่พบคำตอบที่ชัดเจนสำหรับคำถามนี้ พิจารณารหัสต่อไปนี้: #include <string> // ... // in a method std::string a = "Hello "; std::string b = "World"; std::string c = a + b; คอมไพเลอร์บอกฉันว่าไม่พบตัวดำเนินการที่โอเวอร์โหลดสำหรับchar[dim]. หมายความว่าในสตริงไม่มีตัวดำเนินการ + หรือไม่? แต่ในหลายตัวอย่างมีสถานการณ์เช่นนี้ หากนี่ไม่ใช่วิธีที่ถูกต้องในการต่อสตริงเพิ่มเติมวิธีที่ดีที่สุดคืออะไร?

4
long long ใน C / C ++
ฉันกำลังลองใช้รหัสนี้ในคอมไพเลอร์ C ++ ของ GNU และไม่เข้าใจพฤติกรรมของมัน: #include <stdio.h>; int main() { int num1 = 1000000000; long num2 = 1000000000; long long num3; //num3 = 100000000000; long long num4 = ~0; printf("%u %u %u", sizeof(num1), sizeof(num2), sizeof(num3)); printf("%d %ld %lld %llu", num1, num2, num3, num4); return 0; } เมื่อฉันยกเลิกการแสดงความคิดเห็นในบรรทัดที่แสดงความคิดเห็นรหัสจะไม่รวบรวมและให้ข้อผิดพลาด: ข้อผิดพลาด: ค่าคงที่จำนวนเต็มใหญ่เกินไปสำหรับประเภทยาว …


5
โหลดพฤติกรรมที่ไม่ได้กำหนดและจุดลำดับใหม่
พิจารณาหัวข้อนี้เป็นภาคต่อของหัวข้อต่อไปนี้: งวดก่อนหน้า พฤติกรรมที่ไม่ได้กำหนดและจุดลำดับ มาทบทวนสำนวนที่ตลกและซับซ้อนนี้กันอีกครั้ง(วลีตัวเอียงนำมาจากหัวข้อด้านบน * smile *): i += ++i; เรากล่าวว่าสิ่งนี้ก่อให้เกิดพฤติกรรมที่ไม่ได้กำหนด ผมเข้าใจว่าเมื่อพูดแบบนี้เราคิดว่าโดยปริยายประเภทของการiเป็นหนึ่งในตัวชนิด เกิดอะไรขึ้นถ้าประเภทของการiเป็นผู้ใช้กำหนดชนิดใด? บอกว่าประเภทของมันคือIndexสิ่งที่กำหนดไว้ในโพสต์นี้ (ดูด้านล่าง) มันจะยังคงเรียกใช้พฤติกรรมที่ไม่ได้กำหนดหรือไม่? ถ้าใช่เพราะเหตุใด มันไม่เทียบเท่ากับการเขียนi.operator+=(i.operator++());หรือแม้แต่ไวยากรณ์ที่เรียบง่ายกว่า i.add(i.inc());? หรือพวกเขาเรียกร้องพฤติกรรมที่ไม่ได้กำหนดมากเกินไป? ถ้าไม่ทำไมไม่? ท้ายที่สุดวัตถุiจะถูกแก้ไขสองครั้งระหว่างจุดลำดับที่ต่อเนื่องกัน โปรดระลึกถึงหลักการง่ายๆ: นิพจน์สามารถแก้ไขค่าของอ็อบเจ็กต์ได้เพียงครั้งเดียวระหว่าง "ลำดับจุด" ที่ต่อเนื่องกันและถ้า i += ++iเป็นนิพจน์ก็จะต้องเรียกใช้พฤติกรรมที่ไม่ได้กำหนดหากเป็นเช่นนั้นจะมีค่าเทียบเท่าi.operator+=(i.operator++());และ i.add(i.inc());ต้องเรียกใช้พฤติกรรมที่ไม่ได้กำหนดซึ่ง ดูเหมือนจะไม่จริง! (เท่าที่ฉันเข้าใจ) หรือi += ++iไม่ใช่นิพจน์ที่ขึ้นต้นด้วย? ถ้าเป็นเช่นนั้นคำจำกัดความของนิพจน์คืออะไร? หากเป็นนิพจน์และในเวลาเดียวกันพฤติกรรมของมันก็ถูกกำหนดไว้อย่างดีเช่นกันแสดงว่าจำนวนจุดลำดับที่เกี่ยวข้องกับนิพจน์นั้นขึ้นอยู่กับประเภทของตัวถูกดำเนินการที่เกี่ยวข้องกับนิพจน์ ฉันถูกต้อง (แม้บางส่วน) หรือไม่? แล้วสำนวนนี้ล่ะ? //Consider two cases: //1. If a is an array …

6
ทำไมฉันถึงต้องใช้ std :: get_tem Contemporary_buffer?
ควรใช้เพื่อวัตถุประสงค์std::get_temporary_bufferอะไร? Standard กล่าวต่อไปนี้: รับตัวชี้ไปยังหน่วยเก็บข้อมูลที่เพียงพอสำหรับจัดเก็บวัตถุ T ที่อยู่ติดกันได้สูงสุด n ตัว ฉันคิดว่าบัฟเฟอร์จะถูกจัดสรรบนสแต็ก แต่นั่นไม่เป็นความจริง ตามมาตรฐาน C ++ บัฟเฟอร์นี้ไม่ได้เกิดขึ้นชั่วคราว ฟังก์ชันนี้มีข้อดีอะไรบ้างเมื่อเทียบกับฟังก์ชันโกลบอล::operator newซึ่งไม่ได้สร้างอ็อบเจกต์ด้วย ฉันคิดถูกหรือไม่ที่ข้อความต่อไปนี้เทียบเท่า int* x; x = std::get_temporary_buffer<int>( 10 ).first; x = static_cast<int*>( ::operator new( 10*sizeof(int) ) ); ฟังก์ชันนี้มีเฉพาะสำหรับน้ำตาลไวยากรณ์หรือไม่? ทำไมถึงมีtemporaryชื่อ? มีการแนะนำกรณีการใช้งานหนึ่งกรณีในวารสารของดร. ด็อบบ์วันที่ 1 กรกฎาคม พ.ศ. 2539สำหรับการใช้อัลกอริทึม: หากไม่สามารถจัดสรรบัฟเฟอร์ได้หรือมีขนาดเล็กกว่าที่ร้องขออัลกอริทึมยังคงทำงานได้อย่างถูกต้องเพียงแค่ช้าลงเท่านั้น

4
photoshop ผสมผสานสองภาพเข้าด้วยกันอย่างไร? [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Stack Overflow ปิดให้บริการ1 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ใครช่วยอธิบายวิธีการที่ Photoshop ผสมผสานภาพสองภาพเข้าด้วยกันเพื่อที่ฉันจะสร้างเอฟเฟกต์เดียวกันในแอปพลิเคชันของฉันได้

4
วิธีกำหนดประเภทต่างๆสำหรับคลาสเดียวกันใน C ++
ฉันต้องการมีหลายประเภทที่แชร์การใช้งานเดียวกัน แต่ยังคงเป็นประเภทที่แตกต่างกันใน C ++ เพื่ออธิบายคำถามของฉันด้วยตัวอย่างง่ายๆฉันต้องการมีคลาสสำหรับแอปเปิ้ลส้มและกล้วยซึ่งทั้งหมดมีการดำเนินการเหมือนกันและการนำไปใช้งานเหมือนกัน ฉันต้องการให้พวกเขามีประเภทต่างๆเพราะฉันต้องการหลีกเลี่ยงข้อผิดพลาดเนื่องจากความปลอดภัยของประเภท class Apple { int p; public: Apple (int p) : p(p) {} int price () const {return p;} } class Banana { int p; public: Banana (int p) : p(p) {} int price () const {return p;} } class Orange ... เพื่อไม่ให้รหัสซ้ำดูเหมือนว่าฉันสามารถใช้ผลไม้คลาสพื้นฐานและสืบทอดจากมันได้: class Fruit …
84 c++  types 

5
Enum vs enum พิมพ์อย่างมาก
ฉันเป็นมือใหม่ในการเขียนโปรแกรม C ++ วันนี้ผมเจอกระทู้ใหม่: enumขอพิมพ์ ฉันได้ค้นคว้าข้อมูลมาบ้างแล้ว แต่จนถึงตอนนี้ฉันยังไม่สามารถหาคำตอบได้ว่าทำไมเราถึงต้องการสิ่งนี้และอะไรคือสิ่งที่ใช้เหมือนกัน? ตัวอย่างเช่นหากเรามี: enum xyz{a, b, c}; /*a = 0, b = 1, c = 2, (Typical C format)*/ ทำไมเราต้องเขียน: enum class xyz{a, b, c}; เรากำลังพยายามทำอะไรที่นี่? ข้อสงสัยที่สำคัญที่สุดของฉันคือวิธีการใช้งาน คุณช่วยยกตัวอย่างเล็กน้อยซึ่งจะทำให้ฉันเข้าใจ
84 c++  c++11  enums 

2
std :: dynarray vs std :: vector
C ++ 14 นำเสนอstd::dynarray: std :: dynarray เป็นคอนเทนเนอร์ลำดับที่ห่อหุ้มอาร์เรย์ที่มีขนาดคงที่ที่โครงสร้างและไม่เปลี่ยนแปลงตลอดอายุการใช้งานของวัตถุ std::dynarraystd::vectorจะต้องได้รับการจัดสรรในเวลาทำงานเหมือน ดังนั้นประโยชน์และการใช้งานstd::dynarrayในขณะที่เราสามารถใช้แบบstd::vectorไหนที่มีไดนามิกมากกว่า (และปรับขนาดได้อีกด้วย)?
84 c++  stdvector 

1
ผู้ดำเนินการแคสต์สามารถเปิดเผยได้หรือไม่?
เมื่อพูดถึงคอนสตรัคเตอร์การเพิ่มคีย์เวิร์ดexplicitจะป้องกันไม่ให้คอมไพเลอร์ที่กระตือรือร้นสร้างอ็อบเจกต์เมื่อมันไม่ใช่ความตั้งใจแรกของโปรแกรมเมอร์ กลไกดังกล่าวมีให้สำหรับผู้ประกอบการหล่อด้วยหรือไม่? struct Foo { operator std::string() const; }; ตัวอย่างเช่นที่นี่ฉันอยากจะร่ายFooเป็น a std::stringได้ แต่ฉันไม่ต้องการให้นักแสดงดังกล่าวเกิดขึ้นโดยปริยาย

2
std :: is_function ใช้งานอย่างไร?
การดำเนินการต่อไปนี้เป็นstd::is_functionอย่างไร template<class T> struct is_function : std::integral_constant< bool, !std::is_const<const T>::value && !std::is_reference<T>::value > {}; (จากการอ้างอิง CPP ) ดูเหมือนว่าฉันintจะเป็นฟังก์ชั่นภายใต้คำจำกัดความนี้ ฉันกำลังคิดถึงอะไร
82 c++  templates  std  sfinae 

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