在一个库中,我有一个函数,在数据库中search一个键,并返回一个非const引用到一个对象。 我想处理找不到键的情况,这通常是由于调用函数时出现错误而导致的。 这种情况非常糟糕,程序无法继续,所以我打印一条消息来帮助发现错误并调用exit(1) 。 问题是在这种情况下永远不会执行的return语句,但必须在那里。 如果它是一个指针,我可以只return nullptr; 但有一个参考? 我应该做这样的伪代码吗? Type & get(const Key & k) { if (my_db.key_exists(k)) { return my_db.at(k); } std::cerr << k << " not found\n"; exit(1); return *(new Type(some_dummy_parameters)); } 它看起来太可怕了! 也许我应该避免这样的function。 请让我知道你的意见!
只是想知道在不同的编译器和debugging/发布configuration中它是如何实现的。 标准是否提供了有关其实施的build议? 它有什么不同吗? 我试图运行一个简单的程序,我已经从函数返回非const引用和指向局部variables的指针,但是它的工作方式相同。 那么,内部引用只是一个指针吗?
与代码一样 #include <iostream> struct P { int x; P(int x) : x(x) {} ~P() { std::cout << "~P()\n"; } }; int main() { auto const& x = P{10}.x; std::cout << "extract\n"; } 海湾合作委员会打印~P() extract ,表明临时的生存期不被引用扩展。 相反,Clang(IMO正确地)将临时的生命周期延长到参考x的生命周期,因此在main的输出之后将调用析构函数。 请注意,GCC突然显示了Clang的行为,如果我们,而不是int ,使用一些类types(例如string )。 这是GCC中的错误还是标准允许的?
我已经到处阅读,那么在那里和那里都必须初始化参考,不能再次重新初始化。 为了testing我的理解,我写了下面的小程序。 似乎我已经成功地重新分配了一个参考。 有人可以向我解释我的程序中究竟发生了什么? #include <iostream> #include <stdio.h> #include <conio.h> using namespace std; int main() { int i = 5, j = 9; int &ri = i; cout << " ri is : " << ri <<"\n"; i = 10; cout << " ri is : " << ri << "\n"; ri = j; // […]
考虑一下你有两个节点列表,你知道的是一个是某棵树的前序遍历的表示,另一个是同一棵树的后序遍历的表示。 我相信有可能从这两个列表中完全重构树,我想我有一个algorithm来做,但没有certificate它。 因为这将是一个硕士项目的一部分,我需要绝对肯定,这是可能的和正确的(mathcertificate)。 然而,这不是项目的重点,所以我想知道是否有一个源(即纸或书),我可以引用的证据。 (也许在TAOCP?有人可能知道该段?) 简而言之,我需要一个经过validation的algorithm,使用可引用的资源从前后遍历中重构树。 注意:有问题的树可能不是二进制的,或者是平衡的,或者任何会使它变得太简单的东西。 注2:只使用前序或后序列表会更好,但我不认为这是可能的。 注3:节点可以有任意数量的子节点。 注4:我只关心兄弟姐妹的顺序。 只有一个孩子的时候,左边或右边不重要。
我有一个C#项目(称之为MainProj ),它引用了其他几个DLL项目。 通过将这些项目添加到MainProj的引用中,它将构build它们并将其生成的DLL复制到MainProj的工作目录。 我想要做的就是把这些引用的DLL放在MainProj工作目录的子目录,即MainProj / bin / DLL中,而不是工作目录本身。 我不是一个非常有经验的C#程序员,但来自C ++世界,我假设一种方法是删除项目引用,并显式加载所需的DLL的path和文件名(即在C + +, LoadLibrary )。 然而,如果有一种方法,我想要做的是设置某种“参考二进制path”,所以当我构build时,它们都会被自动复制到这个子目录(然后从那里引用我需要明确加载每个)。 这样的事情可能吗? 如果不是,C#中的首选方法是什么,我完成了什么(即东西与Assembly.Load / Assembly.LoadFile / Assembly.LoadFrom ?什么在AppDomain也许,或System.Environment ?)
我想有结构成员知道他们的父母。 这大概是我想要做的: struct Parent<'me> { children: Vec<Child<'me>>, } struct Child<'me> { parent: &'me Parent<'me>, i: i32, } fn main() { let mut p = Parent { children: vec![] }; let c1 = Child { parent: &p, i: 1 }; p.children.push(c1); } 我试图安抚编译器的生命,而没有完全理解我在做什么。 以下是我被卡住的错误消息: error[E0502]: cannot borrow `p.children` as mutable because `p` is also borrowed as […]
鉴于一个DLL文件,我希望能够find该DLL文件中的方法的所有调用。 我该怎么做? 从本质上讲,我怎样才能以编程方式做Visual Studio已经做了什么? 我不想使用像.NET Reflector这样的工具来做到这一点,但reflection是好的,可能是必要的。
有什么办法可以find参考地址吗? 使其更具体:variables本身的地址,而不是它初始化variables的地址。
这是一个例子: #include<iostream> #include<thread> using namespace std; void f1(double& ret) { ret=5.; } void f2(double* ret) { *ret=5.; } int main() { double ret=0.; thread t1(f1, ret); t1.join(); cout << "ret=" << ret << endl; thread t2(f2, &ret); t2.join(); cout << "ret=" << ret << endl; } 输出是: ret=0 ret=5 用gcc 4.5.2编译,有和没有-O2 这是预期的行为? 这个程序数据竞赛是免费的吗? 谢谢