Questions tagged «c++»

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


11
如何向C ++数组添加元素?
我想将int添加到数组中,但是问题是我不知道现在的索引是什么。 int[] arr = new int[15]; arr[0] = 1; arr[1] = 2; arr[2] = 3; arr[3] = 4; arr[4] = 5; 该代码有效,因为我知道我要分配给哪个索引,但是如果我不知道该索引该怎么办... 在PHP中,我可以这样做arr[]=22;,它将自动将22添加到数组的下一个空索引中。但是在C ++中我无法做到这一点,它给了我一个编译器错误。你们有什么建议?
74 c++  arrays 

6
创建持有已分配数组的unique_ptr的正确方法
创建一个unique_ptr来保存在免费存储中分配的数组的正确方法是什么?Visual Studio 2013默认情况下支持此功能,但是当我在Ubuntu上使用gcc版本4.8.1时,会出现内存泄漏和未定义的行为。 可以使用以下代码重现该问题: #include <memory> #include <string.h> using namespace std; int main() { unique_ptr<unsigned char> testData(new unsigned char[16000]()); memset(testData.get(),0x12,0); return 0; } Valgrind将给出以下输出: ==3894== 1 errors in context 1 of 1: ==3894== Mismatched free() / delete / delete [] ==3894== at 0x4C2BADC: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==3894== by 0x400AEF: …
74 c++  linux  gcc  c++11  unique-ptr 



7
我可以使用NULL代替0值吗?
我可以使用NULL指针替代值0吗? 或这样做有什么问题吗? 例如,例如: int i = NULL; 代替: int i = 0; 作为实验,我编译了以下代码: #include <stdio.h> int main(void) { int i = NULL; printf("%d",i); return 0; } 输出: 0 确实,它给了我这个警告,它本身是完全正确的: warning: initialization makes integer from pointer without a cast [-Wint-conversion] 但结果仍然相同。 我是否会由此陷入“不确定行为”? 可以这样使用NULL吗? NULL在算术表达式中用作数字值有什么问题吗? 在这种情况下,C ++的结果和行为是什么? 我已阅读的答案是什么NULL之间的区别,“\ 0”和0大约之间的区别是什么NULL,\0以及0是的,但我没有从那里简洁的信息,如果是很允许的,也是正确的使用NULL作为在赋值和其他算术运算中使用的值。

7
如何使用以用户定义类型为键的std :: maps?
我想知道为什么不能将STL映射与用户定义的类一起使用。当我编译下面的代码时,我收到以下神秘的错误消息。这是什么意思?此外,为什么仅在用户定义的类型中发生这种情况?(将原始类型用作键时可以使用。) C:\ MinGW \ bin .. \ lib \ gcc \ mingw32 \ 3.4.5 ........ \ include \ c ++ \ 3.4.5 \ bits \ stl_function.h ||在成员函数`bool std ::中less <_Tp> :: operator()(const _Tp&,const _Tp&)const [with _Tp = Class1]':| C:\ MinGW \ bin .. \ lib \ gcc \ mingw32 \ …

14
C ++是否有任何“开箱即用”的2D / 3D绘图库?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题。 6年前关闭。 改善这个问题 我研究了在交互式窗口中绘制函数(或其他类型的图形)的不同选项。我主要使用wxWidgets,但会接受任何其他“接口”。 查看可用的内容,这是我发现的内容: wxPlot:自2006年以来未更新。但是如果它是...,它将是一个不错的选择。 wxMathPlot:非常新,不成熟,功能很少(仍处于活动状态?) libgraph:已过时,不是重画,仅2D,仅输出图像。 koolplot:太基本了,无法控制创建的窗口。 EasyBMP:非常基本,仅输出图像。 plotutils:仅命令行。 plplot:几乎不维护C和C ++ API。实际上,wxPlot基于此。如果我们更新了C和C ++接口,也可能是候选对象。 任何意见?有想法吗? 谢谢!
73 c++  graph  wxwidgets  plot 

11
Vim中突出显示的类和函数名称
在迷上了模式输入后,我最近从Textmate设置了Vim环境。 但是,语法高亮在Vim中似乎并不那么漂亮。我使用C ++编写代码,由于无法突出显示函数调用和类名,因此代码更难阅读。我玩了一下配色方案,但是找不到对应于“类名”或“功能名”的任何字段。 在下面的图片中,请注意MacVim右侧的突出显示方式DroughtLayer::和*.size()未突出显示的方式。 (来源:ivzhao.com) 任何想法如何解决这个问题?我真是个视觉敏感的家伙,这真的让我很烦。

3
如何向下转换std :: shared_ptr?
考虑: struct SomethingThatsABase { virtual bool IsChildOne() const { return false; } virtual bool IsChildTwo() const { return false; } }; struct ChildOne : public SomethingThatsABase { virtual bool IsChildOne() const { return true; } }; struct ChildTwo : public SomethingThatsABase { virtual bool IsChildTwo() const { return true; } …


17
为什么引用在C ++中不可重定位
C ++引用具有两个属性: 他们总是指向同一个对象。 它们不能为0。 指针相反: 它们可以指向不同的对象。 它们可以是0。 为什么在C ++中没有“不可为空的,可重定位的引用或指针”?我想不出为什么引用不可重新引用的充分理由。 编辑: 问题经常出现,因为当我要确保“关联”(在这里避免使用“引用”或“指针”一词)永远不会无效时,我通常会使用引用。 我认为我从来没有想过“太棒了,这个引用总是指向同一个对象”。如果引用是可重新定位的,则仍然可以得到如下所示的当前行为: int i = 3; int& const j = i; 这已经是合法的C ++,但毫无意义。 我这样重申我的问题: “'引用是对象'设计的背后原理是什么?为什么认为引用始终是同一对象而不是仅在声明为const时有用?” 干杯,菲利克斯

4
C ++:临时参数的寿命?
在创建新的a实例MyClass作为函数的参数时,如下所示: class MyClass { MyClass(int a); }; myFunction(MyClass(42)); 该标准是否对析构函数的时间做出任何保证? 具体来说,我可以假设它将在调用之后的下一个语句之前被调用myFunction()吗?
73 c++  destructor 

5
在C ++中访问环境变量
我想$HOME在我正在编写的C ++程序中访问环境变量。如果我用C编写代码,我只会使用该getenv()函数,但是我想知道是否有更好的方法可以做到这一点。这是我到目前为止的代码: std::string get_env_var( std::string const & key ) { char * val; val = getenv( key.c_str() ); std::string retval = ""; if (val != NULL) { retval = val; } return retval; } 我应该使用getenv()C ++访问环境变量吗?有一点我可能会碰到的问题,只要一点点知识就可以避免?

12
允许枚举类使用基于范围的For吗?
我有一个循环的代码块,在其中循环遍历的所有成员enum class。 for与新的相比,我目前使用的循环看起来非常笨拙range-based for。 有什么办法可以利用C ++ 11的新功能来减少当前for循环的冗长程度? 我想改进的当前代码: enum class COLOR { Blue, Red, Green, Purple, First=Blue, Last=Purple }; inline COLOR operator++( COLOR& x ) { return x = (COLOR)(((int)(x) + 1)); } int main(int argc, char** argv) { // any way to improve the next line with range-based for? …
73 c++  for-loop  c++11  enums 

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.