草庐IT

c++ - 什么被认为是 C++ 中的小对象?

我在“现代C++设计”中读到了有关小对象分配的内容。AndreiAlexandrescu认为,通用运算符(new和delete)在分配小对象时表现不佳。在我的程序中,有很多对象在自由存储中创建和销毁。这些对象测量超过8000个字节。什么尺寸被认为是小的?关于C++中的内存分配,8000字节是大还是小? 最佳答案 “小”的定义各不相同,但一般来说,如果对象的大小小于堆分配引起的大小开销(或至少接近该大小),则该对象可以被视为“小”。因此,在大多数情况下,一个16字节的对象可能被认为是“小”对象。在某些特定情况下,32字节的对象可能被认

c++ - 我认为下面的陈述不正确或者我遗漏了什么?

以下段落摘自Stroustup书《TheC++ProgrammingLanguage》(第三版)第420页:Becauseapointertoavirtualmember(sinthisexample)isakindofoffset,itdoesnotdependonanobject’slocationinmemory.Apointertoavirtualmembercanthereforesafelybepassedbetweendifferentaddressspacesaslongasthesameobjectlayoutisusedinboth.Likepointerstoor

c++ - 什么被认为是编译时分支?

这个问题在这里已经有了答案:Whatdocompilersdowithcompile-timebranching?(5个答案)关闭8年前。提供编译时分支的技术/c++语言功能是什么?第一次尝试枚举它们(我期待添加更正):重载解决方案:例如,选择“最佳”版本适合提供的参数voidF(X&arg);voidF(X&&arg);模板专门化:创建针对“特殊参数”运行的代码-一种对模板元编程和编译时递归至关重要的技术templatestructA{/*implementation*/};templatestructA{/*specificcode*/};SFINAE&expressionsfin

'ng'不被认为是内部或外部命令

删除了先前版本的node.js后,现在我安装了它的最新版本。我还安装了@angular/cli。但是,当我试图通过CLI创建新项目时,我会遇到错误“ng”不被认为是内部或外部命令。我使用命令和所有文件夹卸载了几次卸载的node.js。我试图安装@angular/cli,但要低于错误。任何帮助都感激不尽。提前致谢。看答案有两个原因。可能是您没有NPM文件夹PATH安装角(Angular)之后(npminstall@angular/cli-g)在系统或用户环境中附加以下条目:%userProfile%\appdata\roaming\npm打开一个新的窗口外壳ng命令应可用。ng-v_______

c++ - 我可以在调用者处将函数参数默认为 __FILE__ 的值吗?

在C++中,我可以为一个函数设置一个默认参数吗?该参数默认为__PRETTY_FUNCTION___、___FILE___和___LINE__,如此时定义的那样是调用者的,而不是在不使用宏的情况下在头文件中提供默认值的点? 最佳答案 你不能,但你可以用一个额外的宏来实现这个行为。例如:#DEFINETHROW(e)throwException(e,__FILE__,__LINE__);附带说明,__PRETTY_FUNCTION__不是标准的。 关于c++-我可以在调用者处将函数参数默认

c++ - 为什么 vector 被认为是 nothrow_move_constructible?

vector的移动构造函数的规范是(从标准中复制出来的):vector(vector&&);注意缺少noexcept.但是gcc4.8和Clang3.2都报告了std::is_nothrow_move_constructible>::value返回真(即1):#include#includeintmain(){std::cout>::value造成这种明显差异的原因是什么? 最佳答案 标准允许实现根据方法加强异常规范17.6.5.12Restrictionsonexceptionhandling[res.on.exception.h

C++ pthread阻塞队列死锁(我认为)

我在使用pthreads时遇到问题,我认为我遇到了死锁。我创建了一个我认为有效的阻塞队列,但在进行更多测试后,我发现如果我尝试取消阻塞在blocking_queue上的多个线程,我似乎会遇到死锁。阻塞队列很简单,看起来像这样:templateclassBlocking_Queue{public:Blocking_Queue(){pthread_mutex_init(&_lock,NULL);pthread_cond_init(&_cond,NULL);}~Blocking_Queue(){pthread_mutex_destroy(&_lock);pthread_cond_destro

c++ - 为什么我的 unique_ptr 认为它有一个空函数指针删除器?

这个问题在这里已经有了答案:Cannotmovestd::unique_ptrwithNULLdeletertostd::shared_ptr?(2个答案)关闭3年前。我正在尝试使用C++学习SDL。我创建了一个window.hheader和一个window.cpp源文件来存储Window类。在window.h中,它看起来像这样:ClassWindow{public:Window();...private:std::unique_ptrwindow;std::unique_ptrrenderer;...}省略了类中的一些代码。然后,在我的源文件中,在默认构造函数的定义中,我这样做:Wi

c++ - 无效的模板相关成员函数模板推导 - 认为我正在尝试使用 std::set

我有一个继承自基类模板的类模板。基类模板有一个数据成员和一个我想从父类(superclass)中调用的成员函数模板。我知道为了消除对成员函数模板的调用的歧义,我必须使用template关键字,我必须明确提及this在父类(superclass)中。this->base_member_obj.templatemember_function();这一切都很好,只是我使用的代码库犯了一个相当不幸的错误,即导入了整个namespacestd。,我试图调用的模板成员函数称为set.框架中的某处std::set包含在内,这导致GCC认为我正在尝试声明std::set而不是调用成员函数set.GCC

c++ - 如果有两个 "greatest"索引,我如何找到 vector 中最大值的索引,默认为更大的索引?

我一直在使用std::max_element(vec),但据我所知,如果两个“最大”索引相等,它会返回最小索引。例子:vectorv={1,2,3,4,5,3,3,2,5};std::max_element(v)将引用v[4],但出于我的项目的目的,我需要它引用v[8]代替。执行此操作的最佳方法是什么? 最佳答案 你可以用这个max_element(v.rbegin(),v.rend());引用最大值的最大索引。例如,#include"iostream"#include"vector"#include"algorithm"using