草庐IT

C++标准

全部标签

c++ - C 中快速复制的模式

我曾经看到一个编程模式(不是设计),如何实现缓冲区的快速复制。它包括一个交错的循环和开关。问题是,它大部分时间复制4个字节,只有缓冲区的最后几个字节使用较小的数据类型复制。谁能告诉我它的名字?它以一个人的名字命名。它是用C语言完成的,编译器输出几乎是最佳的。 最佳答案 使用memcpy(),它是标准的、可移植的,并且在许多情况下也经过了很好的优化。 关于c++-C中快速复制的模式,我们在StackOverflow上找到一个类似的问题: https://stac

c++ - C中的结构继承

在标准C或C++中是否可以继承另一个结构? 最佳答案 你可以在另一个结构中嵌入一个结构来模拟C中的继承:typedefstruct{inti;}base;voidbasefunc(base*b);typedefstruct{baseb;charc;}extended;extendede;/*Initialiseextendedhere*/basefunc(&e.b);/*Usethetypechecker*/basefunc((base*)&e);/*Justmakesureyouknowwhatyou'redoing*/

c++ - C/C++ `!a` 与 `a==0`

当我有一个整数或一个指针a时,事实证明两者都是!a和a==0具有相同的行为。在非常低的水平上,在计算速度方面是否存在一些差异? 最佳答案 性能上不太可能存在差异,因为编译器知道逻辑等价性,因此它们没有理由不能为两者发出相同的代码。等价性是基本的,而不是一些巧妙的定理:!a的含义对于标准中定义的整数类型是“a的值等于0”(或者严格地说,正如James指出的那样,“不是(a的值不是0)”),而!a对指针类型的意义是“a是一个空指针”(或者严格来说“不是(a的值是一个非空指针)”)。但是,没有要求编译器必须为两者发出相同的代码,因此C或C

c++ - 在 C/C++ 中编写 "pointer to something"的好方法

在C/C++中是否有一种“好的”方式来编写“指向某物的指针”?我曾经写过voidfoo(char*str);但有时我发现它很不合逻辑,因为str的类型是“指向char的指针”,那么它应该更合乎逻辑将*附加到类型名称。写指针有规律吗?char*str;char*str;char*str;char*str; 最佳答案 没有严格的规则,但请记住*附加到变量,所以:char*str1,*str2;//str1andstr2arepointerschar*str1,str2;//str1isapointer,str2isachar有些人也喜欢

c++ - "stdio"和 "stdlib"在 C 中代表什么?

有什么地方可以解释所有速记库名称吗?我不想要关于库做什么的文档,我只想知道标题的缩写。它们是缩写吗? 最佳答案 好的,那么让列表继续下去怎么样:“stdio”:标准输入/输出"stdlib":标准库"printf":格式化打印"fprintf":文件打印格式化("printformattedtofile")"sprintf":stringprintformatted("printformattedtostring")“vfprintf”:可变参数fprintf"fputc":fileputchar("将char放入文件")"scan

C# 到 C 代码 P/INvoke 多个标准 :string declarations lead to stack corruption

我构建了一个带有外部导出的c++dll,以便从我的C#程序中调用它。对于大多数函数,调用工作得很好,但是当我需要将一些字符串从C#传递到C++时会出现问题。我将它们作为普通字符串传递,并作为constchar*接收。它们都很好,所有数据都在那里,但随后我继续从这些char数组中定义了几个字符串。代码继续没有任何问题,直到我退出函数。然后它抛出一个异常,说最后定义的std::string周围的堆栈已损坏,我真的不确定为什么会这样。我尝试了很多定义字符串的方法:复制它们、更改P/Invoke定义的编码。一些额外的信息我从定时器线程调用这个函数;我提到这个是因为我发现,线程上的std::st

c++ - 标准矩形类

我有一个项目,它有一个GUI(用QT编写)和一个命令行版本。我使用了QT中包含的矩形类:QRect.我想打破命令行版本对QT的依赖,所以我需要一个支持交集和union的插入式矩形类。我可以写一个,但如果可能的话我更愿意包括一个。有什么想法吗? 最佳答案 如果您要找到一个要包含的内容,它可能是另一个依赖项的一部分。所以你最好的选择是尝试编写你自己的。现在是练习制作模板类的好时机。:)templatestructpoint{//ormaybeyou'dprefertomaketheseprivateTx;Ty;};templatestr

c++ - Visual Studio 找不到任何标准 C++ 库文件

我有vs2010终极版,然后我下载了2012RC。它一开始运行良好,然后在某些时候.net框架搞砸了,所以我卸载了2012和2010(也许我也手动删除了一些文件夹)。现在我重新安装了vs2010ultimate,问题是我认为没有任何标准库文件存在,所以我不能包含它们中的任何一个。有什么解决办法吗? 最佳答案 这是VS2012RC/Beta卸载程序的一个已知问题。它将注销平台SDK,删除文件夹,甚至更糟-会对所有以前的VS版本进行更改。我不确定它更改了哪些注册表设置(围绕$(VCInstallDir))-但它破坏了它。唯一的选择是找到

c++ - 强制 visual studio 2012 编译器使用 C++ TR1(2007 标准)

是否可以强制visualstudio编译器根据2007C++标准(ISO/IECTR19768:2007,C++TR1)进行编译?我必须避免在当前项目中使用任何C++11功能,即使我们已经在使用2012工作室。 最佳答案 如果您有并行安装,例如VisualStudio2008,您可以在VS2012之外为您的C++项目使用它的编译器。这是通过“平台工具集”在项目设置中完成的。 关于c++-强制visualstudio2012编译器使用C++TR1(2007标准),我们在StackOverf

C++标准写法: Does "through all iterators in the range" imply sequentiality?

ThisSOquestion引发了关于std::generate和标准做出的保证的讨论。特别是,你能否使用具有内部状态的函数对象并依赖于generate(it1,it2,gen)来调用gen(),将结果存储在*it,再调用gen(),存入*(it+1)等,还是可以从后面开始,比如?标准(n3337,§25.3.7/1)是这样说的:Effects:Thefirstalgorithminvokesthefunctionobjectgenandassignsthereturnvalueofgenthroughalltheiteratorsintherange[first,last).Thes