草庐IT

c++ - 我可以将函数的输出参数存储到 unique_ptr 中吗?

我有以下代码:classThing{};voidfnc(Thing**out){*out=newThing();};其中fnc通过输出参数返回Thing的新实例。通常我会按如下方式使用它:intmain(){Thing*thing;fnc(&thing);}我可以将返回的对象放在std::unique_ptr中吗?intmain(){std::unique_ptruniqueThing;fnc(???);} 最佳答案 要扩展您的代码示例,它(即传递指针)将是voidfnc(std::unique_ptr*out){out->rese

c++ - 我可以在不使用原始指针的情况下避免在 std::initializer_list 初始化期间进行复制吗?

假设我有几个在本地声明的对象,我想使用基于范围的for语法对其进行迭代。这似乎运作良好,但是,似乎要将本地对象放入initializer_list,执行复制。这对于像std::shared_ptr这样的对象来说是个坏消息,据我所知,增加引用计数是一个原子操作。我认为可以避免这种情况的唯一方法是使用原始指针。#include#includeintmain(){std::shared_ptrptrInt1=std::make_shared(1);std::shared_ptrptrInt2=std::make_shared(2);/*inthisloop,ptrInt1andptrInt2

c++ - 我可以调整从中移出的 vector 的大小吗?

我有一些代码,我想在其中绝对确保移出的std::vector不会留下secret数据(考虑加密key管理)。在我类(class)的move构造函数中,我做了类似的事情:X(X&&rhs):secret_vector{std::move(rhs.secret_vector)}{rhs.secret_vector.resize(N);safe_zero(rhs.secret_vector);//zerooutallelementsrhs.secret_vector.resize(0);}如您所见,我在move后重新使用了secretvector。我看着Reusingamovedcontai

c++ - 我可以期望我从文字常量设置的浮点变量值在分配给其他变量后不变吗?

如果我这样做:floata=1.5f;floatb=a;voidfunc(floatarg){if(arg==1.5f)printf("Youaretehawresome!");}func(b);文本是否每次(以及在每台机器上)打印?编辑我的意思是,即使我没有进行任何计算,我也不确定该值是否会在某个时候通过FPU,如果是这样,FPU是否会更改该值的二进制表示形式。我在某处读到,(近似)相同的浮点值在IEEE754中可以有多个二进制表示。 最佳答案 首先,1.5可以准确地存储在内存中,因此对于这个特定值,是的,它永远为真。更一般地说,

c++ - 我可以确定 char * 参数寻址了多少有效内存吗?

我有这样的功能://stringisanull-terminatedchararray.ReplaceallainthestringwithbvoidReplaceCharInString(char*string,chara,charb){//loopoverthestringcharbychar,tofindall"a"sandreplacethemwith"b"}我正在做防御性编程。问题是客户端的实现回复真正传递了一个字符数组。如果传入单个字符的地址,程序肯定会进入错误状态(可能会崩溃)。我该如何检查并避免这种情况?(我知道如果我传入std::string对象,问题当然就消失了)

c++ - 我可以通过使用多线程更快地分配内存吗?

如果我创建一个保留1kb整数数组int[1024]的循环,并且我希望它分配10000个数组,我可以通过从多个线程运行内存分配来使其更快吗?我希望它们在堆中。假设我有一个多核处理器来完成这项工作。我已经试过了,但是它降低了性能。我只是想知道,我是不是编写了错误的代码,还是我对内存分配一无所知?答案是否取决于操作系统?如果可以,请告诉我它在不同平台上的工作原理。编辑:整数数组分配循环只是一个简化的例子。不要费心告诉我如何改进它。 最佳答案 这取决于很多事情,但主要是:操作系统你正在使用的malloc的实现操作系统负责分配您的进程可以访问

c++ - 我在这里支付违约 build 费用吗?如果支付的话,我可以避免吗?

在构建T成本高昂的情况下,我想知道在以下情况下我是否为默认构建付费(我想我会付费)std::functionmake_t;std::vectort(100000);std::generate(t.begin(),t.end(),make_T);如果我必须为此付费,我可以避免吗?我想写一些类似的东西std::functionmake_t;std::vectort;t.reserve(100000);std::generate(t.begin(),t.end(),make_T);但这不起作用,因为它不会将t.end()移动到保留内容的末尾。以下是否安全/可取/正确?std::functio

c++ - 我可以将 boost asio 用于 HTTPS 请求吗

我可以对HTTPS请求使用boostasio吗?我可以发出GET和POSTHTTP请求,但是HTTPS呢?我该如何处理?有人可以给我一个代码片段吗? 最佳答案 是的,你可以。http://www.boost.org/doc/libs/1_47_0/doc/html/boost_asio/example/ssl/client.cpp只需将它集成到您​​的HTTP请求中即可。 关于c++-我可以将boostasio用于HTTPS请求吗,我们在StackOverflow上找到一个类似的问题:

c++ - 我可以在不重复签名的情况下实例化模板吗?

我想实例化一些带有长签名的函数:templatevoidfoo(T&t,SomeTypesome_parameter,AnotherTypeanother_parameter,EtcTypeyet_another_parameter,AsYouCanTellthis_is_a_very_long_signature);实例化foo的直接方法是:templatevoidfoo(int&t,SomeTypesome_parameter,AnotherTypeanother_parameter,EtcTypeyet_another_parameter,AsYouCanTellthis_is_

c++ - 在 C++11 中,我可以引用在模板参数中定义的枚举类吗

这是我尝试编写的代码的简化版本:templateclassStateMachine{public:voidSetState(Derived::States){static_cast(this)->TransitionTo(s);}};classMyFSM:publicStateMachine{public:enumclassState{State1,State2,State3};voidTransitionTo(States){_state=s;}private:State_state=State::State1;};我正在使用带有clang的c++11。我在这里得到的错误是10:17