Questions tagged «c++»

C ++是一种通用编程语言。它最初被设计为C的扩展,并且具有类似的语法,但是现在它是一种完全不同的语言。使用此标记可解决有关将要使用C ++编译器编译的代码的问题。对于与特定标准修订版[C ++ 11],[C ++ 14],[C ++ 17]或[C ++ 20]等相关的问题,请使用特定于版本的标记。

11
如何在C ++中将字符串转换为char数组?
我想转换string为chararray但不能char*。我知道如何将字符串转换为char*(通过使用malloc或在代码中发布的方式)-但这不是我想要的。我只是想转换string为char[size]数组。可能吗? #include <iostream> #include <string> #include <stdio.h> using namespace std; int main() { // char to string char tab[4]; tab[0] = 'c'; tab[1] = 'a'; tab[2] = 't'; tab[3] = '\0'; string tmp(tab); cout << tmp << "\n"; // string to char* - but thats not what I want char …

7
读写二进制文件
我正在尝试编写代码以将二进制文件读取到缓冲区中,然后将缓冲区写入另一个文件中。我有以下代码,但是缓冲区仅存储文件第一行中的几个ASCII字符,除此之外没有其他内容。 int length; char * buffer; ifstream is; is.open ("C:\\Final.gif", ios::binary ); // get length of file: is.seekg (0, ios::end); length = is.tellg(); is.seekg (0, ios::beg); // allocate memory: buffer = new char [length]; // read data as a block: is.read (buffer,length); is.close(); FILE *pFile; pFile = fopen ("C:\\myfile.gif", "w"); …
103 c++  file  binary  buffer 

16
C ++在Linux上获得毫秒时间— clock()似乎无法正常工作
在Windows上,clock()返回时间(以毫秒为单位),但是在我正在使用的Linux机器上,它将时间四舍五入到最接近的1000,因此精度仅达到“秒”级别而不是毫秒级别。 我使用QTime该类找到了Qt的解决方案,实例化了一个对象并start()对其进行调用elapsed(),然后调用以获取经过的毫秒数。 我很幸运,因为我从一开始就与Qt合作,但是我想要一个不依赖第三方库的解决方案, 有没有标准的方法可以做到这一点? 更新 请不要推荐Boost .. 如果Boost和Qt可以做到,那肯定不是魔术,他们必须使用某种标准!
102 c++  timer  clock 

2
&&在无效* p = && abc;中是什么意思
我遇到了一段代码void *p = &&abc;。&&这里的意义是什么?我知道右值引用,但我认为&&在这种情况下使用的是不同的。&&表示什么void *p = &&abc;?
102 c++  c  gcc  operators 

7
使程序运行缓慢
有什么方法可以通过更改Linux中的任何OS参数来减慢C ++程序的运行速度?这样,我想模拟一下,如果该特定程序恰好在速度较慢的计算机上运行,​​将会发生什么情况。 换句话说,对于该特定程序,速度更快的计算机应表现为速度较慢的计算机。
102 c++  c  linux  unix  ubuntu 

9
为什么string :: compare返回一个int?
为什么string::compare返回一个int而不是较小的类型,例如shortor char?我的理解是,此方法仅返回-1、0或1。 第二部分,如果我要设计一个比较两个类型的对象的比较方法,Foo而我只想返回-1、0或1,那么使用short或char通常是一个好主意吗? 编辑:我已经得到纠正,string::compare不返回-1、0或1,它实际上返回的值> 0,<0或0。感谢您一直陪伴我。 似乎答案很粗略,没有理由返回小于类型的类型,int因为返回值是“ rvalues”,而这些“ rvalues”不会因为小于int类型(4个字节)而受益。此外,许多人指出,int无论如何,大多数系统的寄存器可能都将具有一定的大小,因为无论您为它们提供1、2还是4字节的值,这些寄存器都将被填充,因此返回a并没有真正的优势。较小的值。 编辑2:实际上,当使用较小的数据类型(例如对齐,遮罩等)时,看起来可能会有额外的处理开销。通常的共识是,较小的数据类型在处理大量数据时会保留在内存中,例如数组的大小写。 今天学到了一些东西,再次感谢大家!
102 c++ 

12
Visual Studio是否支持新的C / C ++标准?
我一直在阅读有关C99和C ++ 11以及所有这些非常甜美的东西,这些东西已经添加到语言标准中,有一天可能会很好用。但是,我们目前在用Visual Studio编写C ++的领域中感到苦恼。 该标准中的任何新内容是否都会添加到Visual Studio中,或者Microsoft是否对添加新的C#变体更感兴趣? 编辑:除了接受的答案,我发现了Visual C ++团队博客: http://blogs.msdn.com/vcblog/ 具体来说,其中的帖子: https://web.archive.org/web/20190109064523/https://blogs.msdn.microsoft.com/vcblog/2008/02/22/tr1-slide-decks/ 很有用。谢谢!


7
在C ++中,从函数返回向量仍然是不好的做法吗?
简短版本:通常以许多编程语言返回大对象(例如向量/数组)。如果该类具有move构造函数,那么C ++ 0x现在可以接受这种样式吗,还是C ++程序员认为它是怪异的/丑陋的/讨厌的? 长版:在C ++ 0x中,仍然认为这是错误的形式吗? std::vector<std::string> BuildLargeVector(); ... std::vector<std::string> v = BuildLargeVector(); 传统版本如下所示: void BuildLargeVector(std::vector<std::string>& result); ... std::vector<std::string> v; BuildLargeVector(v); 在较新的版本中,从返回的值BuildLargeVector是一个右值,因此将使用std::vector(N)RVO不发生的move构造函数构造v 。 甚至在C ++ 0x之前,由于(N)RVO,第一种形式通常也很“高效”。但是,(N)RVO由编译器决定。现在我们有了右值引用,可以保证不会进行深层复制。 编辑:问题实际上不是关于优化。所示的两种形式在现实程序中的性能几乎相同。过去,第一种形式的性能可能会降低几个数量级。结果,很长一段时间以来,第一种形式是C ++编程中的主要代码味道。我希望不再了吗?

12
为什么不从构造函数推断模板参数?
我今天的问题很简单:为什么编译器不能像从函数参数中那样从类构造函数中推断出模板参数?例如,为什么以下代码无效: template<typename obj> class Variable { obj data; public: Variable(obj d) { data = d; } }; int main() { int num = 2; Variable var(num); //would be equivalent to Variable<int> var(num), return 0; //but actually a compile error } 正如我所说,我知道这是无效的,所以我的问题是为什么呢?允许这样做会造成任何重大的语法漏洞吗?是否存在一个实例,该实例不希望使用此功能(推断类型会导致问题)?我只是在试图理解允许对函数进行模板推断的逻辑,而对于允许适当构造的类则不是。

4
如何使用CMake?
我正在尝试使用CMake来编译opencv。 我正在阅读教程,但无法理解什么是CMakeLists文件以及如何将其连接到CMake的GUI? 也无法理解什么是makefile,它们与CMakeLists一样吗? 最终我通过visual-studio打开哪个文件?
102 c++  visual-studio  cmake 

4
在GDB中运行应用程序,直到发生异常
我正在开发一个多线程应用程序,我想使用GDB对其进行调试。 问题是,我的线程之一一直死于消息: pure virtual method called terminate called without an active exception Abort 我知道该消息的原因,但是我不知道它在线程中出现的位置。回溯确实会有所帮助。 当我在GDB中运行我的应用程序时,每当线程被暂停或恢复时它就会暂停。我希望我的应用程序继续正常运行,直到其中一个线程死于该异常为止,这时所有内容都应停止,以便获得回溯。

2
C ++ 11中的随机数生成:如何生成,它如何工作?[关闭]
在这里很难说出要问什么。这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,因此不能以目前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 9年前关闭。 最近,我遇到了一种在C ++ 11中生成随机数的新方法,但是无法消化我所读到的论文(该引擎是什么,数学术语就像“ 分布”,“产生的所有整数均可能相等 ”)。 所以任何人都可以解释一下 这些是什么? 他们是什么意思? 怎么产生的? 他们如何工作? 等等 您可以在一个有关随机数生成的常见问题解答中将其全部调用。
102 c++  c++11  random 

8
枚举类型的名称空间-最佳做法
通常,一个人同时需要几种枚举类型。有时,一个人会发生名字冲突。有两种解决方案:使用名称空间,或使用“较大”的枚举元素名称。命名空间解决方案仍然有两种可能的实现:具有嵌套枚举的虚拟类或完整的命名空间。 我正在寻找这三种方法的利弊。 例: // oft seen hand-crafted name clash solution enum eColors { cRed, cColorBlue, cGreen, cYellow, cColorsEnd }; enum eFeelings { cAngry, cFeelingBlue, cHappy, cFeelingsEnd }; void setPenColor( const eColors c ) { switch (c) { default: assert(false); break; case cRed: //... break; case cColorBlue: //... //... } } …
102 c++  enums  scope  nested 

7
将C int数组重置为零:最快的方法?
假设我们有一个T myarray[100]T = int,unsigned int,long long int或unsigned long long int,将所有内容重置为零的最快方法是什么(不仅用于初始化,而且在程序中多次重置内容) ?也许与记忆模式? 对于类似的动态数组也存在同样的问题T *myarray = new T[100]。
102 c++  c  arrays  memset 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.