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

การอ้างอิงคือค่าที่ช่วยให้โปรแกรมเข้าถึงข้อมูลเฉพาะทางอ้อมเช่นตัวแปรหรือเรคคอร์ดในหน่วยความจำของคอมพิวเตอร์หรือในอุปกรณ์เก็บข้อมูลอื่น

14
เหตุใดอาร์เรย์ของการอ้างอิงที่ผิดกฎหมาย
รหัสต่อไปนี้ไม่ได้รวบรวม int a = 1, b = 2, c = 3; int& arr[] = {a,b,c,8}; มาตรฐาน C ++ พูดถึงอะไรเกี่ยวกับเรื่องนี้ ฉันรู้ว่าฉันสามารถประกาศคลาสที่มีการอ้างอิงจากนั้นสร้างอาร์เรย์ของคลาสนั้นตามที่แสดงด้านล่าง แต่ฉันอยากรู้ว่าทำไมรหัสด้านบนไม่ได้รวบรวม struct cintref { cintref(const int & ref) : ref(ref) {} operator const int &() { return ref; } private: const int & ref; void operator=(const cintref &); }; int …
149 c++  arrays  reference 


17
อันไหนดีกว่าคืนค่าหรือพารามิเตอร์ออก
หากเราต้องการรับค่าจากวิธีใดเราสามารถใช้ค่าส่งคืนเช่นนี้ public int GetValue(); หรือ: public void GetValue(out int x); ฉันไม่เข้าใจความแตกต่างระหว่างพวกเขาดังนั้นไม่รู้ว่าอะไรดีกว่า คุณช่วยอธิบายสิ่งนี้ให้ฉันได้ไหม ขอบคุณ.
147 c#  reference 

19
ไม่รู้จัก Namespace (แม้ว่าจะอยู่ที่นั่น)
ฉันได้รับข้อผิดพลาดนี้: ไม่พบประเภทหรือชื่อเนมสเปซ 'AutoMapper' (คุณพลาดการใช้ไดเรกทีฟหรือการอ้างอิงแอสเซมบลีหรือไม่) สิ่งที่ตลกคือฉันมีการอ้างอิงในโครงการของฉันอยู่แล้ว: และนี่คือรหัสของฉัน: using System.Collections.Generic; using DataContract; using SelectorDAL; using AutoMapper; namespace SpecimenSelect { public class SpecimenSelect : ISpecimenSelect { public SpecimenSelect() { SetupMaps(); } private static void SetupMaps() { Mapper.CreateMap<SpecimenDetail, SpecimenDetailContract>(); } สิ่งประหลาดอื่น ๆ คือฉันมีสองโครงการอื่น ๆ ในการแก้ปัญหาของฉันที่ทั้งสองใช้ AutoMapper และกำลังอ้างอิงไฟล์ AutoMapper.dll เดียวกันแน่นอน พวกเขาทั้งสองทำงานได้ดีอย่างสมบูรณ์ นี่คือภาพหน้าจอของหนึ่ง: และนี่คือรหัสนั้น (ที่รวบรวมได้ดี): using …
145 c#  reference 



4
เหตุใด C # จึงไม่สนับสนุนการส่งคืนข้อมูลอ้างอิง
ฉันได้อ่านว่า. NET รองรับการส่งคืนข้อมูลอ้างอิง แต่ C # ไม่ได้ มีเหตุผลพิเศษหรือไม่? ทำไมฉันไม่สามารถทำสิ่งที่ชอบ: static ref int Max(ref int x, ref int y) { if (x > y) return ref x; else return ref y; }

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 

10
ฉันควรเลือกพอยน์เตอร์หรือการอ้างอิงในข้อมูลสมาชิกหรือไม่?
นี่เป็นตัวอย่างง่าย ๆ เพื่อแสดงคำถาม: class A {}; class B { B(A& a) : a(a) {} A& a; }; class C { C() : b(a) {} A a; B b; }; ดังนั้น B เป็นผู้รับผิดชอบสำหรับการปรับปรุงส่วนหนึ่งของซีฉันวิ่งรหัสผ่านผ้าสำลีและมัน whinged เกี่ยวกับสมาชิกในการอ้างอิง: ผ้าสำลี # 1725 การพูดคุยเกี่ยวกับการดูแลการคัดลอกและการมอบหมายเริ่มต้นที่ยุติธรรมพอ แต่การคัดลอกและการมอบหมายเริ่มต้นก็ไม่ดีสำหรับพอยน์เตอร์ดังนั้นจึงมีข้อได้เปรียบเล็กน้อย ฉันมักจะพยายามใช้การอ้างอิงที่ฉันสามารถทำได้เนื่องจากพอยน์เตอร์พอยน์เตอร์แนะนำความไม่แน่นอนเกี่ยวกับผู้ที่รับผิดชอบในการลบตัวชี้นั้น ฉันชอบที่จะฝังวัตถุตามค่า แต่ถ้าฉันต้องการตัวชี้ฉันใช้ auto_ptr ในข้อมูลสมาชิกของคลาสที่เป็นเจ้าของตัวชี้และส่งวัตถุไปรอบ ๆ เพื่ออ้างอิง ฉันมักจะใช้ตัวชี้ในข้อมูลสมาชิกเท่านั้นเมื่อตัวชี้อาจเป็นโมฆะหรือสามารถเปลี่ยนแปลงได้ มีเหตุผลอื่นอีกไหมที่จะชอบพอยน์เตอร์มากกว่าการอ้างอิงสำหรับสมาชิกข้อมูล เป็นความจริงหรือไม่ที่จะบอกว่าวัตถุที่มีการอ้างอิงไม่ควรกำหนดได้เนื่องจากการอ้างอิงไม่ควรเปลี่ยนเมื่อเริ่มต้น?

10
การส่งต่อการอ้างอิงไปยังพอยน์เตอร์ใน C ++
เท่าที่ฉันสามารถบอกได้ไม่มีเหตุผลใดที่ฉันไม่ควรได้รับอนุญาตให้ส่งการอ้างอิงไปยังตัวชี้ใน C ++ อย่างไรก็ตามความพยายามของฉันล้มเหลวและฉันไม่รู้ว่าทำไม นี่คือสิ่งที่ฉันทำ: void myfunc(string*& val) { // Do stuff to the string pointer } // sometime later { // ... string s; myfunc(&s); // ... } และฉันได้รับข้อผิดพลาดนี้: ไม่สามารถแปลงพารามิเตอร์ 1 จาก 'std :: string *' เป็น 'std :: string * &'
130 c++  pointers  reference 

2
เหตุใดจึงไม่แนะนำให้ยอมรับการอ้างอิงถึง String (& String), Vec (& Vec) หรือ Box (& Box) เป็นอาร์กิวเมนต์ของฟังก์ชัน
ฉันเขียนรหัส Rust ที่ใช้&Stringเป็นอาร์กิวเมนต์: fn awesome_greeting(name: &String) { println!("Wow, you are awesome, {}!", name); } ฉันยังเขียนโค้ดที่ใช้อ้างอิงถึงVecหรือBox: fn total_price(prices: &Vec<i32>) -> i32 { prices.iter().sum() } fn is_even(value: &Box<i32>) -> bool { **value % 2 == 0 } อย่างไรก็ตามฉันได้รับคำติชมว่าการทำเช่นนี้ไม่ใช่ความคิดที่ดี ทำไมจะไม่ล่ะ?

1
ไม่สามารถย้ายออกจากเนื้อหาที่ยืมมา / ไม่สามารถย้ายออกจากข้อมูลอ้างอิงที่แชร์ได้
cannot move out of borrowed contentฉันไม่เข้าใจข้อผิดพลาด ฉันได้รับมันหลายครั้งและฉันแก้ไขมันมาตลอด แต่ฉันไม่เคยเข้าใจว่าทำไม ตัวอย่างเช่น: for line in self.xslg_file.iter() { self.buffer.clear(); for current_char in line.into_bytes().iter() { self.buffer.push(*current_char as char); } println!("{}", line); } สร้างข้อผิดพลาด: error[E0507]: cannot move out of borrowed content --> src/main.rs:31:33 | 31 | for current_char in line.into_bytes().iter() { | ^^^^ cannot move out …

9
การ push_back องค์ประกอบจากเวกเตอร์เดียวกันปลอดภัยหรือไม่
vector<int> v; v.push_back(1); v.push_back(v[0]); หาก push_back ครั้งที่สองทำให้เกิดการจัดสรรใหม่การอ้างอิงถึงจำนวนเต็มแรกในเวกเตอร์จะใช้ไม่ได้อีกต่อไป อย่างนี้ไม่ปลอดภัยเหรอ? vector<int> v; v.push_back(1); v.reserve(v.size() + 1); v.push_back(v[0]); สิ่งนี้ทำให้ปลอดภัย?

14
Android: ไม่สามารถแปลง @ drawable / picture เป็น drawable
ในโฟลเดอร์ที่วาดได้ของฉันฉันมีภาพอยู่สองสามภาพและทุกภาพอ้างอิงได้อย่างสมบูรณ์แบบ แต่เมื่อฉันลองเพิ่มรูปภาพอื่น ๆ ที่มีขนาดเท่ากันในโฟลเดอร์เดียวกันและพยายามอ้างอิงมันเกิดข้อผิดพลาด"ไม่สามารถแปลง @ ได้ วาดได้ / รูปภาพลงในสิ่งที่วาดได้ " . ฉันได้ลองใช้รูปภาพเดียวกันโดยใช้ชื่ออื่นและมันก็ทำให้ฉันมีข้อผิดพลาดนั้นอยู่เรื่อย ๆ ฉันได้ลองใช้ในรูปแบบ XML ที่แตกต่างกันและสิ่งเดียวกัน นอกจากนี้ชื่อของภาพยังเป็น "jack", "abc", "question_mark" ดังที่คุณเห็นว่ามีกฎอย่างเคร่งครัดเกี่ยวกับอักขระที่คุณสามารถใช้และยังคงมีข้อความแสดงข้อผิดพลาดปรากฏขึ้น คำแนะนำใด ๆ ที่ดีในการแก้ไขปัญหาขอบคุณ ไม่สามารถแปลง @ drawable / picture เป็น drawable

4
อ้างอิงโมฆะได้หรือไม่?
รหัสชิ้นนี้ถูกต้อง (และพฤติกรรมที่กำหนด) หรือไม่ int &nullReference = *(int*)0; ทั้งสองกรัม ++ ++ และเสียงดังกราวรวบรวมไว้โดยไม่มีการเตือนใด ๆ แม้เมื่อใช้-Wall, -Wextra, -std=c++98, -pedantic, -Weffc++... แน่นอนว่าการอ้างอิงไม่ได้เป็นโมฆะเนื่องจากไม่สามารถเข้าถึงได้ (หมายถึงการยกเลิกการอ้างอิงตัวชี้ค่าว่าง) แต่เราสามารถตรวจสอบได้ว่าเป็นโมฆะหรือไม่โดยการตรวจสอบที่อยู่: if( & nullReference == 0 ) // null reference

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