C ++引用有两个属性: 他们总是指向同一个对象。 他们不能是0。 指针是相反的: 他们可以指向不同的对象。 他们可以是0。 为什么在C ++中没有“不可空,可复位的引用或指针”? 我想不出一个很好的理由,为什么不应该重新提供参考。 编辑:问题经常出现,因为我通常使用引用时,我想确保一个“关联”(我在这里避免单词“参考”或“指针”)永远无效。 我不认为我曾经想过“这个参考文献总是指向同一个客体”。 如果引用是可复位的,那么仍然可以得到如下的当前行为: int i = 3; int& const j = i; 这已经是合法的C ++,但毫无意义。 我重申我的问题是这样的: “引用背后的原理是什么?对象的devise是什么?为什么引用总是相同的对象,而不是只有当声明为const? 干杯,菲利克斯
下面的代码不能编译。 int a = 1, b = 2, c = 3; int& arr[] = {a,b,c,8}; C ++标准对此有何评论? 我知道我可以声明一个包含引用的类,然后创build该类的数组,如下所示。 但我真的想知道为什么上面的代码不能编译。 struct cintref { cintref(const int & ref) : ref(ref) {} operator const int &() { return ref; } private: const int & ref; void operator=(const cintref &); }; int main() { int a=1,b=2,c=3; //typedef const int […]
是否可以用一个string和一个int引用一个variables,如下所示: int number1; int j = 1; @"number%i", j = 3; //Hope this makes sense.. 上面的代码给我警告,不起作用,这怎么可能做到。 我也试过这个,但它不起作用(很明显的原因): int j = 1; NSString *refString = [NSString stringWithFormat:@"number%i", j]; refString = 3; 我真的很挣扎,我知道如何在Javascript中做到这一点,但不是在Obj-C中,这有可能吗?
我觉得这有点主观。 我不确定意见是否会一致(我已经看到很多代码片断,其中引用被返回)。 根据对这个问题的评论, 我刚刚问到,关于初始化引用 ,返回一个引用可能是邪恶的,因为[据我所知],更容易错过删除它,这可能导致内存泄漏。 这让我感到担忧,因为我遵循例子(除非我想象的东西),并在less数几个地方这样做…我误解了吗? 它是邪恶的吗? 如果是这样,那么多么邪恶? 我觉得,因为我的指针和引用混杂,加上我是新来的C ++的事实,并彻底混淆什么时候使用,我的应用程序必须是内存泄漏地狱… 另外,我明白,使用智能/共享指针通常被认为是避免内存泄漏的最好方法。
我正在学习/试验Rust,在我用这种语言发现的所有优雅中,有一个让我感到困惑的特性,似乎完全不合适。 在进行方法调用时,Rust会自动解引用指针。 我做了一些testing,以确定确切的行为: struct X { val: i32 } impl std::ops::Deref for X { type Target = i32; fn deref(&self) -> &i32 { &self.val } } trait M { fn m(self); } impl M for i32 { fn m(self) { println!("i32::m()"); } } impl M for X { fn m(self) { println!("X::m()"); } } impl<'a> […]
我写了一个程序,运行和信息Skype消息,如果完成。 我需要为Skype4COM.dll添加一个参考,以便通过Skype发送消息。 我们有十几台networking上的计算机和共享的文件服务器(等等)。 所有其他电脑都需要能够运行这个程序。 我希望避免手工设置参考。 我曾计划把这个引用放在一个共享的位置,并在程序运行时以编程方式添加它。 我似乎无法弄清楚如何使用VBA以编程方式向Excel 2007添加引用。 我知道如何手动:打开VBE –> Tools –> References –> browse –_> File Location and Name 。 但是这对我的目的不是很有用。 我知道在Access Vb.net中有办法做到这一点 ,类似这样的代码不断popup,但我不知道我理解它,或者如果是相关的: ThisWorkbook.VBProject.References.AddFromGuid _ GUID:="{0002E157-0000-0000-C000-000000000046}", _ Major:=5, Minor:=3 到目前为止,在提出的解决scheme中,为了以编程方式添加引用,我们需要手动添加引用并更改信任中心 – 这不仅仅是添加引用。 虽然我猜如果我遵循提出的解决scheme,我将能够以编程方式添加未来的参考。 这可能是值得的。 任何进一步的想法将是伟大的。
我想写一个程序,将分两步写一个文件。 在程序运行之前文件可能不存在。 文件名是固定的。 问题是OpenOptions.new().write()可能会失败。 在这种情况下,我想调用一个自定义函数trycreate() 。 这个想法是创build文件,而不是打开它,并返回一个句柄。 由于文件名是固定的, trycreate()没有参数,我不能设置返回值的生命周期。 我该如何解决这个问题? use std::io::Write; use std::fs::OpenOptions; use std::path::Path; fn trycreate() -> &OpenOptions { let f = OpenOptions::new().write(true).open("foo.txt"); let mut f = match f { Ok(file) => file, Err(_) => panic!("ERR"), }; f } fn main() { { let f = OpenOptions::new().write(true).open(b"foo.txt"); let mut f = match f […]
我理解指针和引用的语法和一般语义,但是我应该如何决定何时在API中使用引用或指针? 当然,有些情况需要一个或另一个( operator++需要一个引用参数),但一般来说,我发现我更喜欢使用指针(和指针),因为语法清楚,variables正在被破坏性地传递。 例如在下面的代码中: void add_one(int& n) { n += 1; } void add_one(int* const n) { *n += 1; } int main() { int a = 0; add_one(a); // Not clear that a may be modified add_one(&a); // 'a' is clearly being passed destructively } 随着指针,它总是(更)明显是怎么回事,所以对于清晰度是一个大问题的API和类似的指针不比引用更适合? 这是否意味着引用只能在必要时使用(如operator++ )? 有没有任何性能问题与其中一个? 编辑(OUTDATED): 除了允许NULL值和处理原始数组外,似乎select归结为个人偏好。 我已经接受了下面的引用Google的C ++风格指南的答案,因为他们提出了“引用可能会令人困惑,因为它们具有值语法,但是指针语义”。 由于需要额外的工作来清理不应该为NULL的指针参数(例如, […]
我是MongoDB的新手 – 来自关系数据库的背景。 我想用一些评论来devise一个问题结构,但是我不知道用哪种关系来进行评论: embed还是reference ? 有一些评论的问题,如stackoverflow ,会有这样的结构: Question title = 'aaa' content = bbb' comments = ??? 起初,我想使用embedded的评论(我认为在MongoDB中推荐embed ),就像这样: Question title = 'aaa' content = 'bbb' comments = [ { content = 'xxx', createdAt = 'yyy'}, { content = 'xxx', createdAt = 'yyy'}, { content = 'xxx', createdAt = 'yyy'} ] 很清楚,但是我很担心这个情况: 如果我想编辑一个特定的评论,我怎样才能得到它的内容和它的问题? 没有_id让我find一个,也没有question_ref让我find它的问题。 […]
$el = array_shift($instance->find(..)) 上面的代码以某种方式报告严格的标准警告,但是这不会: function get_arr(){ return array(1,2); } $el = array_shift(get_arr()); 那么它何时会报告警告呢?