草庐IT

c++ - 一种编码风格能绝对保证没有内存泄漏吗?

从不使用新删除发布更喜欢使用std::make_uniquestd::unique_ptrstd::move重置(冗余)应该道德上不会导致内存泄漏:new'ed指针只在智能指针内部创建,它们永远无法逃脱,因为我们不允许使用release.因此,人们可能会被诱惑使用这种编码风格,然后再也不会费心检查内存泄漏——无论异常可能从哪里抛出,智能指针的RAII语义应该总是清理任何悬空指针作为堆栈已解开。除了C++充满了令人讨厌的惊喜。根据gotw反复打破我的假设的经验,我不禁认为可能有一些极端情况无论如何都会导致内存泄漏。更糟糕的是,除了release本身,可能还有一种明显的释放指针所有权的方法

c++一次读入一个字符的c风格字符串?

在C++中,id喜欢一次将一个字符读入C风格的字符串中。如果不首先创建具有设定大小的字符数组(您不知道用户将输入多少个字符),您将如何做到这一点。既然你不能调整数组的大小,这是怎么做到的?我一直在思考这些问题,但这行不通。charwords[1];intcount=0;charc;while(cin.get(c)){words[count]=c;chartemp[count+1];count++;words=temp;delete[]temp;} 最佳答案 因为您不能使用std::vector,我假设您也不能使用std::strin

c++ - 将 std::vector<char*> 转换为 C 风格的参数 vector arv

我想准备一个老式的参数vector(argv)在函数中使用intexecve(constchar*filename,char*constargv[],char*constenvp[]);我用STL::vector类试过:std::stringarguments=std::string("arg1");std::vectorargv;charargument[128];strcpy(argument,arguments.c_str());argv.push_back(argument);argv.push_back('\0');//finishargvwithzero最后我将vector

C++ 风格约定 : Parameter Names within Class Declaration

我是一个相当新的C++程序员,我想听听支持和反对在类声明中命名参数的争论。这是一个例子:Student.h#ifndefSTUDENT_H_#defineSTUDENT_H_#includeusingnamespacestd;classStudent{private:stringname;unsignedintage;floatheight,GPA;public:Student(string,unsignedint,float,float);voidsetAge(unsignedint);};#endif/*STUDENT_H_*/对比#ifndefSTUDENT_H_#defineS

C++ 良好的编码风格 - 总是完全限定库类型?

在使用标准库类型的C++中,什么通常被认为是好的编码风格?例如,如果我有一个usingnamespacestd;指令,您是否仍然希望看到像这样完全限定的库类型:std::string还是仅使用就可以接受string作为类型标识符?如果你完全符合条件,你能解释一下背后的理由吗? 最佳答案 在头文件中完全限定。在.cpp文件中导入命名空间。防止全局命名空间被简单的#include弄得乱七八糟 关于C++良好的编码风格-总是完全限定库类型?,我们在StackOverflow上找到一个类似的问题

Github开源项目Excalidraw:简洁易用的手绘风格白板工具

Excalidraw是Github上的一个开源项目,它提供了一个简洁易用的手绘图形创建工具,用户可以通过它创建流程图、示意图、架构图和其他各种图形。本文将介绍Excalidraw的特点和功能,并探讨其在技术层面上的优势和扩展能力。GitHub地址:https://github.com/excalidraw/excalidraw/releases/tag/v0.17.0在线体验:手绘风格白板|一个覆盖广泛主题工具的高效在线平台(amd794.com)https://amd794.com/excalidraw1.简洁易用的界面设计:Excalidraw以其简洁的设计和直观易用的界面著称。用户可以通

c++ - 涉及私有(private)继承的 C 风格向上转型和向下转型

考虑以下代码:-classA{};classB:privateA{};B*bPtr1=newB;//A*aPtr1=bPtr1;//error//A*aPtr2=static_cast(bPtr1);//errorA*aPtr3=(A*)bPtr1;B*bPtr2=(B*)aPtr3;当隐式和static_cast都失败时(还有dynamic_cast),C风格的转换丢弃了私有(private)继承。为什么?如果C风格的转换只是一些小事,那么C++转换是如何实现的,即它们如何从内存占用中知道继承类型?在将bPtr1转换为aPtr3之后,我将不得不使用另一个C风格的转换来向下转换为B,因

c++ - C++ 中 Fortran 风格的多维数组

是否有一个C++库提供Fortran风格的多维数组,支持切片、作为过程参数传递和体面的文档?我调查了blitz++但它死了! 最佳答案 我强烈建议Armadillo:ArmadilloisaC++linearalgebralibrary(matrixmaths)aimingtowardsagoodbalancebetweenspeedandeaseofuse它是一个C++模板库:Adelayedevaluationapproachisemployed(atcompile-time)tocombineseveraloperations

c++ - clang-format 重写 WebKit 风格的多行注释

我正在尝试使用clang-format来清理我存储库中的代码。我们使用WebKit样式作为格式化的基础,但我们也想确保多行注释的格式正确。根据我的理解,可以通过这样定义.clang-format文件来覆盖给定样式的格式设置规则:BasedOnStyle:WebKitAlignTrailingComments:true这样clang-format应该对齐尾随的注释。给定输入文件:/***Thisisamulti-linecomment*/voidfunction(){/***Thisiscommentinsidethefunction*/}我的期望是以下输出/***Thisisamult

c++ - Google 风格指南(前向声明部分)

前言Google风格指南包含前向声明的缺点列表前向声明可以隐藏依赖项,允许用户代码在header更改时跳过必要的重新编译。前向声明可能会被库的后续更改破坏。函数和模板的前向声明可以防止header所有者对其API进行其他兼容的更改,例如扩大参数类型、添加具有默认值的模板参数或迁移到新的命名空间。转发声明来自命名空间std::的符号会产生未定义的行为。可能很难确定是否需要前向声明或完整的#include。将#include替换为前向声明可以悄无声息地改变代码的含义:代码://b.h:structB{};structD:B{};//good_user.cc:#include"b.h"voi