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

5
อายุการใช้งานของตัวแปรแบบคงที่ในฟังก์ชัน C ++ คืออะไร
หากตัวแปรถูกประกาศstaticในขอบเขตของฟังก์ชั่นมันจะเริ่มต้นได้เพียงครั้งเดียวและเก็บค่าไว้ระหว่างการเรียกใช้ฟังก์ชัน อายุการใช้งานของมันคืออะไร? ตัวสร้างและ destructor ของมันถูกเรียกเมื่อใด void foo() { static string plonk = "When will I die?"; }
373 c++  static  lifetime 

2
เหตุใดฉันไม่สามารถเก็บค่าและการอ้างอิงถึงค่านั้นในโครงสร้างเดียวกันได้
ฉันมีค่าและฉันต้องการเก็บค่านั้นและการอ้างอิงถึงสิ่งที่อยู่ภายในค่านั้นในประเภทของฉันเอง: struct Thing { count: u32, } struct Combined<'a>(Thing, &'a u32); fn make_combined<'a>() -> Combined<'a> { let thing = Thing { count: 42 }; Combined(thing, &thing.count) } บางครั้งฉันมีค่าและฉันต้องการเก็บค่านั้นและการอ้างอิงถึงค่านั้นในโครงสร้างเดียวกัน: struct Combined<'a>(Thing, &'a Thing); fn make_combined<'a>() -> Combined<'a> { let thing = Thing::new(); Combined(thing, &thing) } บางครั้งฉันไม่ได้อ้างอิงค่าและได้รับข้อผิดพลาดเดียวกัน: struct Combined<'a>(Parent, Child<'a>); fn make_combined<'a>() …

10
เหตุใดจึงต้องมีการกำหนดอายุการใช้งานที่ชัดเจนใน Rust
ฉันกำลังอ่านบทในช่วงชีวิตของหนังสือ Rust และฉันเจอตัวอย่างนี้สำหรับอายุการใช้งานที่ตั้งชื่อ / ชัดเจน: struct Foo<'a> { x: &'a i32, } fn main() { let x; // -+ x goes into scope // | { // | let y = &5; // ---+ y goes into scope let f = Foo { x: y }; // ---+ f goes …

1
ช่วงชีวิตที่ไม่ใช่ศัพท์คืออะไร?
Rust มีRFCที่เกี่ยวข้องกับอายุขัยที่ไม่ใช่ศัพท์ซึ่งได้รับการอนุมัติให้ใช้งานในภาษาเป็นเวลานาน เมื่อเร็ว ๆ นี้การรองรับฟีเจอร์นี้ของ Rust ได้พัฒนาไปมากและถือว่าสมบูรณ์ คำถามของฉันคืออายุการใช้งานที่ไม่ใช่ศัพท์คืออะไร?

1
การใช้ตัวแปรใน initializer ของตัวเอง
[basic.scope.pdecl] / 1ของร่างมาตรฐาน C ++ 20 มีตัวอย่าง (ไม่ใช่กฎเกณฑ์) ดังต่อไปนี้ในบันทึกย่อ (อ้างบางส่วนจากก่อนที่จะรวมคำขอดึง 3580ดูคำตอบสำหรับคำถามนี้): unsigned char x = x; [... ] x ถูกเตรียมใช้งานด้วยค่าของตัวเอง (ไม่ทราบแน่ชัด) สิ่งนี้มีพฤติกรรมที่ชัดเจนใน C ++ 20 หรือไม่ โดยทั่วไปการกำหนดค่าเริ่มต้นด้วยตนเองของแบบฟอร์มT x = x;จะมีพฤติกรรมที่ไม่ได้กำหนดโดยอาศัยคุณค่าของxการไม่ได้กำหนดค่าก่อนที่การเริ่มต้นจะเสร็จสมบูรณ์ การประเมินค่าที่ไม่ทราบแน่ชัดมักทำให้เกิดพฤติกรรมที่ไม่ได้กำหนด ( [basic.indent] / 2 ) แต่มีข้อยกเว้นเฉพาะใน[basic.indent] /2.3ที่อนุญาตให้เริ่มต้นunsigned charตัวแปรโดยตรงจากค่า lvalue unsigned charด้วยค่าที่ไม่ทราบแน่ชัด ) นี้เพียงอย่างเดียวไม่ดังนั้นจึงไม่ก่อให้เกิดพฤติกรรมที่ไม่ได้กำหนด แต่จะประเภทอื่น ๆTที่ไม่ได้รับการรับรองรูปแบบตัวอักษรหรือแคบเช่นstd::byte int x = x;ข้อควรพิจารณาเหล่านี้มีผลใน …

1
ตัวชี้ทางคณิตศาสตร์ในหน่วยเก็บข้อมูลที่จัดสรรอนุญาตตั้งแต่ C ++ 20 หรือไม่
ใน C ++ 20 มาตรฐานมันก็บอกว่าประเภทอาร์เรย์เป็นประเภทอายุการใช้งานโดยปริยาย หมายความว่าอาเรย์สำหรับประเภทอายุการใช้งานที่ไม่แน่นอนสามารถสร้างได้หรือไม่? การสร้างอาเรย์โดยนัยจะไม่ทำให้เกิดการสร้างองค์ประกอบของอาเรย์? พิจารณากรณีนี้: //implicit creation of an array of std::string //but not the std::string elements: void * ptr = operator new(sizeof (std::string) * 10); //use launder to get a "pointer to object" (which object?) std::string * sptr = std::launder(static_cast<std::string*>(ptr)); //pointer arithmetic on not created array …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.