Questions tagged «c++»

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

27
C状态机设计
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题编辑此帖子。 3个月前关闭。 改善这个问题 我正在用C和C ++混合编写一个小项目。我正在我的一个工作线程的中心构建一个小型的状态机。 我想知道您是否对SO的专家会分享您的状态机设计技术。 注意:我主要是在尝试和测试过实现技术之后。 更新:基于SO收集的所有宝贵意见,我决定采用以下架构:




3
未定义对'std :: cout'的引用
这是示例吗? #include <iostream> using namespace std; int main() { cout << "Hola, moondo.\n"; } 它引发错误: gcc -c main.cpp gcc -o edit main.o main.o: In function `main': main.cpp:(.text+0xa): undefined reference to `std::cout' main.cpp:(.text+0xf): undefined reference to `std::basic_ostream<char,std::char_traits<char> >& std::operator<< <std::char_traits<char>>(std::basic_ostream<char, std::char_traits<char> >&, char const*)' main.o: In function `__static_initialization_and_destruction_0(int,int)': main.cpp:(.text+0x3d): undefined reference …
193 c++  c++11  gcc  cout 

9
C ++ 11中弃用了哪些C ++习惯用法?
有了新标准,就有了新的做事方法,许多方法都比旧方法好,但是旧方法仍然可以。显然,出于向后兼容的原因,新标准并未正式弃用。因此,剩下的问题是: 哪种旧的编码方式绝对不如C ++ 11风格,我们现在可以做什么? 在回答这个问题时,您可以跳过一些明显的事情,例如“使用自动变量”。
192 c++  c++11  c++-faq 

21
您是否在C ++中使用NULL或0(零)作为指针?
在C ++的早期,当它被拴在C之上时,您不能使用NULL,因为它被定义为(void*)0。您不能将NULL分配给除以外的任何指针void*,这使它毫无用处。那时,您已经接受过将0零指针用于空指针。 直到今天,我仍继续使用零作为空指针,但周围的人坚持使用NULL。我个人认为将名称(NULL)赋予现有值没有任何好处-并且由于我也喜欢将指针作为真值进行测试: if (p && !q) do_something(); 那么使用零会更有意义(例如,如果您使用NULL,则不能在逻辑上使用p && !q-您需要与进行显式比较NULL,除非您假设NULL为零,在这种情况下,请使用NULL)。 是否有客观的理由更喜欢零而不是NULL(反之亦然),或者仅仅是个人喜好? 编辑:我应该添加(并最初要说),对于RAII和异常,我很少使用零/ NULL指针,但是有时您仍然需要它们。
192 c++  null 


7
STL中真正的双端队列是什么?
Наэтотвопросестьответына 堆栈溢出нарусском:Особенностьразмещениеэлементовв的std :: deque的 我正在查看STL容器并试图弄清它们的真正含义(即所使用的数据结构),但双端队列使我停了下来:我认为起初它是一个双链表,因此允许在两端插入和删除固定时间,但是操作员[] 承诺要在固定时间内完成,这让我感到困扰。在链表中,任意访问应为O(n),对吗? 如果它是一个动态数组,它如何在恒定时间内添加元素?应该提到的是,可能发生重新分配,并且O(1)是摊销成本,就像vector一样。 因此,我想知道这种结构允许在恒定时间内进行任意访问,而同时又无需将其移至更大的新位置。
192 c++  stl  deque 

2
函数中的静态constexpr变量有意义吗?
如果我在函数中有一个变量(例如,一个大数组),则将其声明为static和constexpr是否有意义?constexpr保证数组是在编译时创建的,那static会没用吗? void f() { static constexpr int x [] = { // a few thousand elements }; // do something with the array } static根据生成的代码或语义,实际上在做什么?
192 c++  static  c++11  constexpr 

2
哪些Boost功能与C ++ 11重叠?
几年前,我把我的C ++技能放在架子上,现在看来,当我再次需要它们时,情况发生了变化。 现在我们有了C ++ 11,我的理解是它与许多Boost功能重叠。 是否存在一些重叠之处的摘要,哪些Boost库将成为传统,推荐使用哪些C ++ 11功能而不是boost功能,以及哪些更好?
191 c++  boost  c++11 

12
在没有/ proc / self / exe的情况下查找当前可执行文件的路径
在我看来,Linux使用/ proc / self / exe很容易。但是我想知道是否有一种方便的方法可以通过跨平台接口在C / C ++中找到当前应用程序的目录。我已经看到一些项目与argv [0]混为一谈,但它似乎并不完全可靠。 例如,如果您必须支持没有/ proc /的Mac OS X,您会怎么做?使用#ifdefs隔离特定于平台的代码(例如,NSBundle)?还是尝试从argv [0],$ PATH和诸如此类的东西推断出可执行文件的路径,冒着在边缘情况下发现错误的风险?
190 c++  c  linux  macos  executable 

19
我可以在C或C ++中使用二进制文字吗?
我需要使用一个二进制数。 我试着写: const x = 00010000; 但这没有用。 我知道我可以使用与值相同的十六进制数00010000,但是我想知道C ++中是否存在用于二进制数的类型,如果没有,那么是否存在针对我的问题的另一种解决方案?
190 c++  c  binary 

13
您不应该继承std :: vector
好的,这确实很难让人承认,但是目前我确实有很强的诱惑力可以继承std::vector。 我需要大约10种针对矢量的自定义算法,并且希望它们直接成为矢量的成员。但是我自然也希望拥有的其余std::vector界面。好吧,作为守法公民,我的第一个想法是std::vectorMyVector班级成员。但是然后我将不得不手动重新提供所有std :: vector的接口。输入太多。接下来,我考虑了私有继承,因此我将using std::vector::member在公共部分写一堆,而不是提供方法。其实这也很乏味。 在这里,我确实确实认为我可以简单地从公开继承std::vector,但是在文档中提供警告,该类不应被多态使用。我认为大多数开发人员都有足够的能力来理解,无论如何都不应多态地使用它。 我的决定绝对不合理吗?如果是这样,为什么?您能否提供一种替代方法,使其他成员实际成为成员,而不涉及重新键入vector接口的所有内容?我对此表示怀疑,但如果可以的话,我会很高兴。 此外,除了一些白痴可以写类似的事实 std::vector<int>* p = new MyVector 使用MyVector 还有其他现实的危险吗?通过说现实,我舍弃了像想象一个需要指向矢量指针的函数之类的事情。 好吧,我已经说了我的案子。我犯罪了。现在由你来原谅我:)
189 c++  oop  inheritance  stl  vector 

5
什么是不归路?
[dcl.attr.noreturn]提供以下示例: [[ noreturn ]] void f() { throw "error"; // OK } 但我不明白这是什么意思[[noreturn]],因为该函数的返回类型已经存在void。 那么,该noreturn属性的意义是什么?应该如何使用?

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.