草庐IT

c++ - 每次在循环中进行临时均匀随机分布的效率如何?

例如:for(...){...std::uniform_real_distribution(min,max)(rng)...}在我看来,直觉上构造函数除了存储这两个值外不需要做太多事情,并且uniform_*_distribution实例中不应该有任何状态。我自己还没有对它进行分析(我还没有处于项目的那个阶段),但我觉得这个问题属于那里:)我知道这对于某些分布类型来说不是一个好主意-例如,std::normal_distribution可能会成对生成它的数字,而第二个数字每次都会被浪费。我觉得我所拥有的比仅仅访问rng()并自己进行数学计算更具可读性,但如果有任何其他方法可以更直接地编

c++ - C++中的临时变量和常量有什么区别?

请允许我先发布我的代码:voidFun(short&s){}voidFunCon(constshort&s){}intmain(){intiTest=20;//note:iTestisintbutparameterofFunis"short&"Fun(iTest);//error,Iknowthereisatempvariable(typecast)FunCon(iTest);//okreturn0;}我知道Fun(iTest);会生成一个新的临时变量(类型转换),但我想知道临时变量是否是一个常量?如果否:为什么我不能将临时变量传递给short&如果是:我有另一个这样的代码:class

c++ - 为什么我需要在临时 dynamic_bitset 上调用 std::move?

我在这里讲一个冗长的背景故事,因为除了直接回答之外,我还想知道我导致这种情况的推理是否正确。我有一个接受dynamic_bitset的函数参数(来自Boost.dynamic_bitset)。说它看起来像这样。voidfoo(boost::dynamic_bitsetdb){//dostuff}碰巧它只被临时调用,从构造函数构建,如foo(boost::dynamic_bitset{5}.set())(使用5位位集调用所有位集)。我的位集只有少量的位(少于32)。所以起初,我想“我只是按值传递它;拷贝比指针小。”但后来我想“它是动态的,所以它必须在堆上分配空间。我想避免不必要的分配和释

c++ - 临时 std::ostringstream 的奇怪(?)行为

我在搞乱std::ostringstream在看这个问题时:sprintfinc++?,并注意到stringbuilder()Nawaz的包装器和思想,应该与std::ostringstream一起工作.所以我的第一次尝试如下:std::cout现在,由于operator,这显然无法(正确)编译是std::ostream-没有成员str().所以我认为类型转换应该可以解决问题,特别是对const的类型转换引用(也适用于转换为普通引用),所以第二次尝试:std::cout(std::ostringstream("select*fromfoolimit")现在可以正常编译并运行,但是输出结

c++ - 修改临时对象

有人能说出为什么test(2)对象在test_method()调用后被销毁吗?#include#includeusingnamespacestd;classtest{intn;public:test(intn):n(n){cout输出是:mainstarttest:1test:2test_method:2~test:2mainend~test:1 最佳答案 test(2).test_method()返回一个引用,它绑定(bind)到test2,然后它引用的对象在结束时销毁完整的表达,因为它是一个临时对象。这应该不足为奇。真正令人惊讶

C++ 临时字符串生命周期

抱歉,我知道存在类似的问题,但我仍然不完全清楚。以下安全吗?voidcopyStr(constchar*s){strcpy(otherVar,s);}std::stringgetStr(){return"foo";}main(){copyStr(getStr().c_str());}临时std::string将存储getStr()的返回值,但它是否存在足够长的时间让我将其C字符串复制到别处?或者我必须明确地为它保留一个变量,例如std::stringtemp=getStr();copyStr(temp.c_str()); 最佳答案

c++ - Range-Based for 循环如何处理临时容器

这个问题在这里已经有了答案:DoesaC++11range-basedforloopconditiongetevaluatedeverycycle?(1个回答)关闭7年前。假设这个例子:vectorget_vector();for(auto&v:get_vector()){...}get_vector()是否在每次迭代时重新计算?还是临时存储并评估一次?

c++ - return 语句是否为按值返回的函数创建一个临时对象?

在学习C++11右值引用和移动语义时,我开始对函数究竟如何返回值来初始化变量感到困惑。看下面的例子:WidgetmakeWidget(){Widgetw;…returnw;}Widgetw1=makeWidget();这里我假设没有RVO(即编译不会省略复制/移动)。当执行返回语句returnw;时,执行函数:1)在众所周知的位置(调用者知道的某个固定寄存器或内存位置)复制初始化一个临时对象,其值成为函数的返回值?然后调用者获取这个对象来复制初始化w1?或者2)函数获取w1的调用者传递的内存位置,函数的自动变量w用于复制初始化w1?(这已经是某种RVO了吗?还是某种内联函数行为?或者它

c++ - 显示在 C++ 中创建临时文件的位置

找出在我的C++代码中创建临时变量的最快方法是什么?答案并不总是很容易从标准中推导出来,编译器优化可以进一步消除临时变量。我已经在godbolt.org上进行了试验,它非常棒。不幸的是,当涉及到临时文件时,它经常将树隐藏在汇编程序的木头后面。此外,激进的编译器优化选项使汇编器完全不可读。还有其他方法可以实现吗? 最佳答案 “编译器优化可以进一步消除临时变量。”看来你对C++的语义有一点误解。C++标准讨论临时对象来定义程序的形式语义。这是描述大量可能执行的紧凑方式。实际的编译器根本不需要这样。通常,他们不会。真正的编译器知道寄存器,

c++ - 如何优化在频繁调用的函数中将大型 std::unordered_map 重用为临时函数?

用一个工作示例简化了问题:我想多次重用std::unordered_map(我们称它为umap),类似于以下虚拟代码(它没有做任何有意义的事情)。我怎样才能使这段代码运行得更快?#include#include#includeunsignedsize=1000000;voidfoo(){std::unordered_mapumap;umap.reserve(size);for(inti=0;i在我的原始代码中,我想在umap中存储矩阵条目。每次调用foo时,键值从0到N开始,每次调用foo时N可以不同,但​​索引有10M的上限。此外,值可以不同(与此处始终为i*0.1的虚拟代码相反)。