草庐IT

c++ - 为什么 std::cout << main << std::endl 打印 1?

这个问题在这里已经有了答案:Whycout(2个答案)Howtoprintfunctionpointerswithcout?(7个答案)g++"calling"afunctionwithoutparenthesis(notf()butf;).Whydoesitalwaysreturn1?(2个答案)关闭7年前。#includeintmain(){std::cout为什么它在命令行中打印1?

c++ - nullptr_t驻留在哪里?

有点史前史。我已经写了一段时间的游戏引擎。它分为几个静态库,例如“utils”,“rsbin”(资源系统),“window”,然后链接到一个可执行文件中。它是一个跨平台引擎,正在针对Windows和Android进行编译。在Windows下,我使用MinGW进行编译。在Android下,使用CCTools,它是nativegcc的接口(interface)。基类之一是utils::RefObject,它表示类似于Windows的IUnknown的概念:它提供了一个确定其生存期的引用计数器,以及一种用于从基类指针中查询特定接口(interface)的方法。还有templateutils:

c++ - 为什么当我使用 std::algorithms 而不是普通循环时这段代码变慢了?

我正在计算vector元素的均值和标准差。我有两个版本,我完全不明白为什么使用标准算法的版本比使用普通循环的版本慢。两个版本都使用这个结构作为返回类型:structMeanAndSigma{doublemean;doublesigma;};带循环的版本是这样的:MeanAndSigmagetMeanAndSigma(constDVector&v){MeanAndSigmams;ms.mean=0;for(inti=0;i还有算法:MeanAndSigmagetMeanAndSigma2(constDVector&v){MeanAndSigmams;ms.mean=std::accumu

c++ - 为什么我不能将此运算符重载放在与结构相同的 namespace 中?

我有以下代码:#include#includenamespaceX{std::ostream&operator&v){for(inti=0;ix;};std::ostream&operatorv(10,0);std::cout第一个重载有效,但第二个无效。由于某种原因,它找不到第一个。我收到错误:nomatchfor'operator}'and'conststd::vector')os我不明白为什么会出现此错误。例如,这样的事情似乎是完全有效的:namespaceA{voidfoo(){}namespaceB{voidbar(){foo();}}}但是,解决上述问题的唯一方法是将第二个

c++ - 命名空间标准重载小于

我很好奇为什么这段代码不起作用:#include"stdafx.h"#include#include#include#include#includetypedefstd::tupleintString;booloperator(lhs),std::get(lhs))(rhs),std::get(rhs));}voidprintIntStrings(std::vector&v){for(intString&i:v){std::cout(i)(i)v;v.push_back(std::make_tuple(5,"five"));v.push_back(std::make_tuple(2,"

c++ - std::map 用于小型稀疏集合

给定一个结构MyData,其中存在许多实例(我会说最多数百万),对于每个实例,我需要存储一个成员,该成员可能包含最多8个键的值。key将始终是int范围0-7,并且值将始终是float的3D点(我们称之为Point3)。它最多包含:Key|Value-------------0|[x,y,z]1|[x,y,z]2|[x,y,z]3|[x,y,z]4|[x,y,z]5|[x,y,z]6|[x,y,z]7|[x,y,z]但是,在99.9%的情况下,它将包含0或1个键值对,例如:Key|Value-------------1|[x,y,z]如何有效地确定存储空值或单值std::map的内存开

c++ - utf-8 中 std::string 的子字符串? C++11

我需要获取假定为utf8的std::string中前N个字符的子字符串。我了解到.substr无法正常工作……正如……预期的那样。引用:我的字符串大概是这样的:任务:\n\n1亿2千匹 最佳答案 我found这段代码,我正要尝试一下。std::stringutf8_substr(conststd::string&str,unsignedintstart,unsignedintleng){if(leng==0){return"";}unsignedintc,i,ix,q,min=std::string::npos,max=std::s

c++ - 在同一个赋值表达式中使用 std::move(object) 和 object.method() 。

下面表达式的结果是否定义明确?这是什么?hash_map[object.key()]=std::move(object);我不确定std::move部分的效果是否会发生在object.key()部分之前或之后,因此我的问题。 最佳答案 它的定义很明确,因为这段代码中的第一个并不重要:您可以将其重写为以下等价物hash_map[object.key()]=static_cast(object);关于代码我们能说些什么:object.key()应该在分配给map之前执行std::move(object)应在分配给map之前执行然后将对m

c++ - 派生类与基类的 std::shared_ptr 的使用

下面的方法好不好?classTA{};classTB:TA{};std::shared_ptrspta;spta.reset(newTB); 最佳答案 显示的代码有一个问题,TB必须公开继承自TA.你有一个shared_ptr,所以你想要存储在其中的指针必须可以转换为TA,但带有private继承,基础不可访问,因此您的代码将无法编译。classTA{};classTB:publicTA{};除此之外,代码没有错误并且运行良好。通常,通过基类指针对派生类实例进行多态删除时,需要基类的析构函数为virtual。所以派生类析构函数被调用

c++ - 使用 constexpr 编译时字符串连接

#include#includeconstexprstd::stringappendStringC(std::strings){returns+"Constexprfunc";}std::stringappendString(std::strings){returns+"Regularfunc";}intmain(){std::strings1="String1";std::strings2="String2";std::cout我正在尝试使用constexpr执行编译时字符串前缀/后缀连接操作。但是,此示例会产生以下错误:const_string_generation.cpp:Inf