在下面的代码段中,由于复制选择,a
不会发生移动和复制
struct A;
A function1();
A function2();
int main(int argc, char**) {
if (argc > 3) {
A a = function1();
} else {
A a = function2();
}
return 0;
}
这很好,但是a
在if-block之外是不可访问的。 在外部声明a
时,将发生移动
struct A;
A function1();
A function2();
int main(int argc, char**) {
A a;
if (argc > 3) {
a = function1();
} else {
a = function2();
}
return 0;
}
当在调用站点上的if块中复制删除到if范围之外的变量时,从复制删除中获利的推荐方式是什么?
编译器-Exlorer链接
通常,您必须使用placement new来执行以下操作:
template<class T>
struct box {
char buf[sizeof(T)]; // real code should handle alignment
T *p{}; // will point to buf
void reset() {
if(p) p->~T();
p=nullptr;
}
~box() {reset();}
};
void f() {
box<A> a;
if(…) a.p=new (a.buf) A(function1());
else a.p=new (a.buf) A(function2());
// use *a.p
}
这允许围绕初始化的任意语句,以及重复使用单个变量等。
box
只是std::optional
的一个重新实现,具有允许直接new
的勇气; 当然,将它包装在一个函数中会为从任何函数返回的a
实现一个临时值。 box::p
避免了必须使用std::launder
来处理生存期问题。
在这种特殊情况下,您可以使用三元条件:
A a = argc>3 ? function1() : function2();
在更复杂的情况下,您可能需要保存条件并进行几项检查,例如。
const bool cond = argc>3;
A a = cond ? function1() : function2();
A b = cond ? function3() : function4();
我有以下代码: 我要复制的类: 创建一些类 公共对象createObj(String cls\u name,String param1,int param2){返回Class.forName(cls\u name)。getConstructor(String.Class,Integer.Class)。newInstance(param1,param2);} 然后我尝试使用以下内容复制该类的对象:
问题内容: HTML: 脚本: 请告诉我在调用方法时如何使用模板值? 问题答案: 从指令调用函数时,传递范围变量值而不插入值()。
问题内容: 我有点着急,所以我只想问一个关于querydsl的快速问题。根据我的研究,查询dsl不支持存储过程,但可以支持数据库功能。我的问题是我们如何使用querydsl调用那些数据库函数? 问题答案: 您可以在查询中使用基于TemplateExpression的任意JPQL语法注入。 例如 如果您使用的是Hibernate 4.3或任何其他符合JPA 2.1的提供程序,则可以使用FUNCTIO
我想知道是否有办法在python代码中使用c函数 例如,在做了我的研究之后,我确实使用. dll文件找到了这个解决方案。但它找不到功能我的代码: 享乐cpp: 使用cmd编译它: g有趣。cpp-o乐趣。动态链接库 使用Python调用函数,ctype: 但是我有这个错误: 回溯(最后一次调用):文件“c:\Users\User.vscode\extensions\ms python.python
这是python游戏的基本战利品表。 常见的,如果滴滚动到任何数字,包括13 不寻常,如果下降滚动14通过,并在18 如果跌落在19或20滚动 即使在满足条件的情况下,该程序也会忽略罕见掉落表,而是从罕见掉落表中取出一个项目,例如掉落=20 1000金币 有人能解释一下这里的问题吗?
问题内容: 在我的angularJS应用程序中,我有两个模块:模块A和模块B。 如何在模块B中调用该函数? 问题答案: 您需要在 模块A中 定义一个工厂: 然后使用 模块B中* 的工厂: *
问题内容: 我有一个名为myfunctions.php的文件,其中有很多功能,例如 和jQuery代码, 我需要在此文件中调用特定的函数;例如。我怎样才能做到这一点? 问题答案: 在PHP中 在AJAX中
在node的上下文中,我无法理解ES6模块。js。 假设我有一个简单的节点应用程序。它基于iisnode示例,但我在顶部添加了一个。 你好js: 这将导致在模块之外使用导入语句 但是如果我改名为hello。你好。mjs我收到以下错误: 对我来说似乎是个陷阱,有什么出路? (iisnode版本为0.2.26,节点版本为v13.8.0)