草庐IT

rdbg_std_amd

全部标签

c++ - 将 std::error_code 与非整数值一起使用

我正在编写一个库,并希望在远程系统返回错误时返回错误代码。问题是它们由字符串标识,例如“0A01”,并且还包含一条消息,错误代码需要一个整数作为值。实现错误代码的最佳方法是什么,它具有std::error_code提供的所有功能,但使用字符串作为值?如何将外部错误字符串添加到std::error_code或std::error_category? 最佳答案 如评论中所述,您必须知道可以从远程服务器接收到的错误代码。您从远程服务器收到的std::string包含您所说的两部分,Theproblemisthattheseareident

c++ - 让 Visual Studio 中断用户(std::exception)异常?

我的代码抛出未处理的异常,但VisualStudio中的调试器只中断系统抛出的异常。例如,getaddrinfo的返回值不为零,我的异常应该首先抛出-事实上,如果我在第171行放置一个断点,它会被命中-但调试器只在调用socket时中断。我知道Ihavetoaddmyowntypesexplicitly,orelsecheckAllC++Exceptionsnotinthislist,在ExceptionSettings中,但这是我抛出的std::exception,而std::exception是检查过。如何让VisualStudio调试器在出现异常时自动中断?

c++ - 返回 std::function 的函数的返回类型

这个问题在这里已经有了答案:Recursivetypedeffunctiondefinition:std::functionreturningitsowntype(3个答案)关闭7年前。我有一个函数应该返回一个与该函数类型相同的std::function。基本上我想要这样的东西:usingRetType=std::function;这显然不会编译。如何正确声明返回类型?

c++ - 是否将 std::time 与 std::srand 有效代码一起使用?

在C++中这样写是合法的:std::srand(std::time(nullptr));或者这会产生未定义的行为吗?std::time返回std::time_t这是一种算术类型,但除此之外未指定。据我理解,算术类型是float、整数和字符类型中的任何一种。std::srand将unsignedint作为种子值。因此,我认为您不能严格执行此转换。我读到在符合POSIX的系统上,std::time_t是整数,是自00:00,1970年1月1日UTC以来的秒数。在这种情况下,转换可能需要从有符号转换为无符号,这是实现定义的转换,但应该没问题,并且从较大的整数类型转换为较小的整数类型,这对种子

c++ - 为模板化 key 专门化 std::hash

我试图为我自己的类型专门化哈希,一个模板化的键。我是基于cppreference.我收到编译错误“C++标准不提供此类型的散列”。我想我只是做错了。编译器甚至可以支持这种模板吗?namespacestd{templatestructMyKey{constSTypefrom;constATypeconsume;constPTypepop;};templatestructhash>{size_toperator()(MyKeyconst&key){std::hash()(key.from);std::hash()(key.consume);std::hash()(key.pop);}};}

c++ - 检测系统是否可以运行amd64可执行文件

我已将我的应用程序编译为使用x86指令集,但我需要以编程方式知道运行可执行文件的机器是否支持amd64指令集。有没有一种简单的方法可以找出这一点(可能使用CPUID)?应用程序需要能够在多个操作系统上运行,因此首选基于非操作系统的方法。 最佳答案 您正在寻找代码来检测Longmode.AbitintheCPUIDextendedattributesfieldinformsprogramsinrealorprotectedmodesiftheprocessorcangotolongmode,whichallowsaprogramtod

c++ - 带有 ref_qualified 成员函数的 std::mem_fn

有什么方法可以通过std::mem_fn使用ref限定的成员函数?下面的代码编译失败:classDeadPool{public:voidjump()&{std::cout错误信息:mem_fn_ex.cc:18:15:error:nomatchingfunctionforcallto'mem_fn'autocobj=std::mem_fn(&DeadPool::jump);//Won'tcompile^~~~~~~~~~~/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/functional:1233:1:not

c++ - std::strftime 的返回值

我想我在某处读到,如果我将nullptr传递给std::strftime,该函数将返回所需的缓冲区大小。事实上,下面的代码在我试过的许多linux系统上运行得非常好(虽然不是用VS编译时):#include#include#includeintmain(){std::time_ttime{};std::tmconst*ltime=std::localtime(&time);constchar*formatString="%Y-%b-%d";//allocatebufferofappropriatesizeautorequiredSize=1+std::strftime(nullptr,

c++ - "std::string + char"表达式是否创建另一个 std::string?

下面的表达式是否创建了另一个std::string然后将其添加到s1?std::strings1="abc",s2="xyz";s1+=s2+'b';它是否应该防止这种情况(它们无需额外工作就可以添加到s1)?std::strings1="abc",s2="xyz";s1+=s2;s1+='b';这些规则是否也适用于“std::string+std::string”表达式? 最佳答案 所有涉及std::string的重载+运算符都会返回一个新的std::string对象。这是您在youfinallydecipherthereleva

c++ - 我可以在不复制的情况下将 std::vector<char> 重新解释为 std::vector<unsigned char> 吗?

我引用了std::vector我想用作接受std::vector的函数的参数.我可以不复制就这样做吗?我有以下功能并且有效;但是我不确定是否真的发生了复制-有人可以帮助我理解这一点吗?是否可以使用std::move以避免复制还是它已经没有被复制?staticvoidshowDataBlock(boolusefold,boolusecolor,std::vector&chunkdata){char*buf=chunkdata.data();unsignedchar*membuf=reinterpret_cast(buf);std::vectorvec(membuf,membuf+chun