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

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

2
การเพิ่มประสิทธิภาพจุดลอยตัวนี้อนุญาตหรือไม่
ฉันพยายามตรวจสอบว่าที่ไหนfloatสูญเสียความสามารถในการแทนจำนวนเต็มจำนวนมาก ฉันจึงเขียนตัวอย่างเล็ก ๆ น้อย ๆ นี้: int main() { for (int i=0; ; i++) { if ((float)i!=i) { return i; } } } ดูเหมือนว่าโค้ดนี้จะใช้ได้กับคอมไพเลอร์ทั้งหมดยกเว้นเสียงดัง เสียงดังสร้างการวนซ้ำที่ไม่สิ้นสุดที่เรียบง่าย Godbolt . อนุญาตหรือไม่ ถ้าใช่มันเป็นปัญหา QoI หรือไม่?

4
การใช้ memset () return value คืออะไร?
memset()จะถูกประกาศให้ส่งคืนvoid*ซึ่งเป็นค่าเดียวกับที่อยู่ที่ส่งผ่านไปยังฟังก์ชันเสมอ การใช้คืนมูลค่าคืออะไร? ทำไมมันไม่กลับมาvoid?
90 c++  c  memset 

8
ฉันจะใช้ FormatMessage () อย่างถูกต้องใน C ++ ได้อย่างไร
ไม่มี : MFC ATL ฉันFormatMessage()จะใช้เพื่อรับข้อความแสดงข้อผิดพลาดสำหรับ a ได้HRESULTอย่างไร HRESULT hresult = application.CreateInstance("Excel.Application"); if (FAILED(hresult)) { // what should i put here to obtain a human-readable // description of the error? exit (hresult); }

6
ฉันต้องได้รับการล็อคก่อนที่จะเรียก condition_variable.notify_one () หรือไม่
ฉันสับสนเล็กน้อยเกี่ยวกับการใช้std::condition_variable. ฉันเข้าใจว่าฉันต้องสร้างunique_lockบนก่อนที่จะเรียกmutex condition_variable.wait()สิ่งที่ฉันไม่สามารถหาคือว่าฉันควรจะได้รับการล็อคที่ไม่ซ้ำกันก่อนที่จะเรียกหรือnotify_one()notify_all() ตัวอย่างในcppreference.comขัดแย้งกัน ตัวอย่างเช่นหน้าแจ้งเตือนให้ตัวอย่างนี้: #include <iostream> #include <condition_variable> #include <thread> #include <chrono> std::condition_variable cv; std::mutex cv_m; int i = 0; bool done = false; void waits() { std::unique_lock<std::mutex> lk(cv_m); std::cout << "Waiting... \n"; cv.wait(lk, []{return i == 1;}); std::cout << "...finished waiting. i == 1\n"; done = true; } …

11
วิธีรับการใช้หน่วยความจำในรันไทม์โดยใช้ C ++
ฉันต้องการรับ VIRT การใช้งาน mem และ RES ณ เวลาทำงานของโปรแกรมของฉันและแสดง สิ่งที่ฉันพยายามจนถึงตอนนี้: getrusage ( http://linux.die.net/man/2/getrusage ) int who = RUSAGE_SELF; struct rusage usage; int ret; ret=getrusage(who,&usage); cout<<usage.ru_maxrss; แต่ฉันจะได้ 0 เสมอ

5
ทำไมแลมบ์ดาถึงมีขนาด 1 ไบต์?
ฉันกำลังทำงานกับหน่วยความจำของ lambdas บางตัวใน C ++ แต่ฉันงงกับขนาดของมันเล็กน้อย นี่คือรหัสทดสอบของฉัน: #include <iostream> #include <string> int main() { auto f = [](){ return 17; }; std::cout << f() << std::endl; std::cout << &f << std::endl; std::cout << sizeof(f) << std::endl; } คุณสามารถเรียกใช้ได้ที่นี่: http://fiddle.jyt.io/github/b13f682d1237eb69ebdc60728bb52598 ouptut คือ: 17 0x7d90ba8f626f 1 นี่แสดงให้เห็นว่าขนาดของแลมด้าของฉันคือ 1 เป็นไปได้อย่างไร? อย่างน้อยแลมด้าไม่ควรเป็นตัวชี้การนำไปใช้งานหรือไม่?
90 c++  c++11  lambda  c++14  sizeof 

3
กฎ“ as-if” คืออะไร?
ตามชื่อเรื่องว่า กฎ "as-if" คืออะไร? คำตอบทั่วไปที่เราจะได้รับคือ: กฎที่อนุญาตให้มีการแปลงรหัสใด ๆ และทั้งหมดที่ไม่เปลี่ยนแปลงพฤติกรรมที่สังเกตได้ของโปรแกรม ในบางครั้งเรามักจะได้รับพฤติกรรมจากการใช้งานบางอย่างซึ่งเป็นผลมาจากกฎนี้ ผิดหลายครั้ง. แล้วกฎนี้คืออะไรกันแน่ มาตรฐานไม่ได้กล่าวถึงกฎนี้อย่างชัดเจนว่าเป็นส่วนหรือย่อหน้าดังนั้นอะไรที่อยู่ภายใต้ขอบเขตของกฎนี้? สำหรับฉันแล้วดูเหมือนว่าเป็นพื้นที่สีเทาซึ่งไม่ได้กำหนดรายละเอียดโดยมาตรฐาน ใครสามารถอธิบายรายละเอียดที่อ้างถึงการอ้างอิงจากมาตรฐานได้อย่างละเอียด? หมายเหตุ: แท็กสิ่งนี้เป็น C และ C ++ ทั้งคู่เนื่องจากเกี่ยวข้องกับทั้งสองภาษา
90 c++  c  optimization  c++-faq  as-if 

6
เหตุใดโอเปอเรเตอร์ [] จึงไม่เป็นค่าคงที่สำหรับแผนที่ STL
ตัวอย่างที่เขียนขึ้นเพื่อประโยชน์ของคำถาม: void MyClass::MyFunction( int x ) const { std::cout << m_map[x] << std::endl } สิ่งนี้จะไม่คอมไพล์เนื่องจาก [] ตัวดำเนินการไม่ใช่ const นี่เป็นเรื่องที่น่าเสียดายเนื่องจากไวยากรณ์ [] ดูสะอาดมาก แต่ฉันต้องทำสิ่งนี้แทน: void MyClass::MyFunction( int x ) const { MyMap iter = m_map.find(x); std::cout << iter->second << std::endl } สิ่งนี้ทำให้ฉันรู้สึกแย่เสมอ เหตุใดตัวดำเนินการ [] จึงไม่ใช่ const
90 c++  constants 

3
const void คืออะไร?
คำอธิบายของstd::is_voidระบุว่า: ระบุค่าคงที่ของสมาชิกที่เท่ากับจริงถ้า T เป็นประเภทโมฆะ const โมฆะโมฆะระเหยหรือ const โมฆะระเหย แล้วจะconst voidเป็นvolatile voidอย่างไรหรือก. คำตอบนี้ระบุว่าconst voidประเภทการส่งคืนจะไม่ถูกต้อง (อย่างไรก็ตามคอมไพล์ใน VC ++ 2015) const void foo() { } ถ้าตามมาตรฐานแล้วconst voidไม่ถูกต้อง (VC ผิด) - แล้วคือconst voidอะไร?
90 c++  c++11  c++14 


1
รับประกันสำเนาถูกต้องอย่างไร?
ในการประชุมมาตรฐาน ISO C ++ ของ Oulu ปี 2016 ข้อเสนอที่เรียกว่าการคัดลอกรับประกันผ่านหมวดหมู่ค่าแบบง่ายได้รับการโหวตให้เป็น C ++ 17 โดยคณะกรรมการมาตรฐาน รับประกันสำเนาถูกต้องอย่างไร? ครอบคลุมบางกรณีที่ได้รับอนุญาตให้คัดลอกสำเนาแล้วหรือจำเป็นต้องมีการเปลี่ยนแปลงรหัสเพื่อรับประกันการลอกสำเนาหรือไม่



10
CMake ไม่สามารถระบุภาษาตัวเชื่อมโยงด้วย C ++
ฉันพยายามเรียกใช้โปรแกรม cmake hello world บน Windows 7 x64 กับทั้ง Visual Studio 2010 และ Cygwin แต่ดูเหมือนจะไม่สามารถใช้งานได้ โครงสร้างไดเร็กทอรีของฉันมีดังนี้: HelloWorld -- CMakeLists.txt -- src/ -- -- CMakeLists.txt -- -- main.cpp -- build/ ฉันทำcd buildตามด้วย a cmake ..และได้รับข้อผิดพลาดที่ระบุว่า CMake Error: CMake can not determine linker language for target:helloworld CMake Error: Cannot determine link language …
90 c++  c  cmake 

6
ฟังก์ชันที่ส่งคืนนิพจน์แลมบ์ดา
ฉันสงสัยว่าเป็นไปได้ไหมที่จะเขียนฟังก์ชันที่ส่งคืนฟังก์ชันแลมบ์ดาใน C ++ 11 แน่นอนปัญหาหนึ่งคือวิธีการประกาศฟังก์ชันดังกล่าว แลมบ์ดาแต่ละตัวมีประเภท แต่ประเภทนั้นไม่สามารถแสดงออกได้ใน C ++ ฉันไม่คิดว่าจะได้ผล: auto retFun() -> decltype ([](int x) -> int) { return [](int x) { return x; } } ไม่ใช่สิ่งนี้: int(int) retFun(); ฉันไม่ทราบถึงการแปลงอัตโนมัติใด ๆ จาก lambdas เป็นพูดชี้ไปยังฟังก์ชันหรือบางอย่าง วิธีแก้ปัญหาเดียวคือการประดิษฐ์วัตถุฟังก์ชันและส่งคืนหรือไม่?
90 c++  function  c++11  lambda 

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