Questions tagged «c++»

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

8
在C ++中使用C标头时,我们应该使用std ::或全局名称空间中的函数吗?
C在某种程度上,也不完全是C ++的子集。因此,我们可以通过改变名称一点点(使用最多的C函数的C /头++ stdio.h来cstdio,stdlib.h到cstdlib)。 我的问题实际上是一种语义。在C ++代码(使用最新版本的GCC编译器)中,我可以调用printf("Hello world!");和std::printf("Hello world!");,它的工作原理完全相同。在我正在使用的参考资料中,它也显示为std::printf("Hello world!");。 我的问题是,是否首选std::printf();在C ++中使用?有区别吗?
113 c++  language-lawyer  std 

10
从C ++代码生成UML?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow 的主题。 2年前关闭。 改善这个问题 有没有一种工具可以解析项目中的C ++文件并从中生成UML?
113 c++  uml 

5
抛出新的std :: exception vs抛出std :: exception
在看一些代码时,我偶然发现: throw /*-->*/new std::exception ("//... 我一直以为您不需要/不应该new在这里使用。 正确的方法是什么,都可以,如果可以的话,有什么区别吗? 顺便说一句,从我用PowerShell增强库“抓取”时可以看到,从未使用过throw new。 PS还发现了一些使用的CLI代码throw gcnew。那样行吗?
113 c++  exception 

9
同时迭代两个或多个容器的最佳方法是什么
C ++ 11提供了多种遍历容器的方式。例如: 基于范围的循环 for(auto c : container) fun(c) std :: for_each for_each(container.begin(),container.end(),fun) 但是,建议对两个(或更多个)相同大小的容器进行迭代以完成类似任务的方法是: for(unsigned i = 0; i < containerA.size(); ++i) { containerA[i] = containerB[i]; }

14
跟踪插入顺序的std :: map?
我目前有一个std::map<std::string,int>将整数值存储到唯一字符串标识符的,并且确实在查询该字符串。它主要执行我想要的操作,除了它不跟踪插入顺序。因此,当我迭代地图以打印出值时,它们会根据字符串进行排序;但我希望根据(第一次)插入的顺序对它们进行排序。 我考虑过使用a vector<pair<string,int>>,但是我需要查找字符串并将整数值递增约10,000,000次,因此我不知道a是否std::vector会明显变慢。 有没有一种使用方法,std::map还是有另一个std更适合我需要的容器? [我使用的是GCC 3.4,并且我的值对可能不超过50对std::map。 谢谢。

6
Java是否有自动类型推断功能?
autoJava中是否像C ++中一样有变量类型? 一个例子: for ( auto var : object_array) std::cout << var << std::endl; for( auto var : object_array) var.do_something_that_only_this_particular_obj_can_do(); 我知道Java中有一个增强的for循环,但是有自动吗?如果不是,是否有这样做的技巧?我指的是C ++ 11中的新功能
113 java  c++  auto 


6
为什么我们可以在const对象上使用std :: move?
在C ++ 11中,我们可以编写以下代码: struct Cat { Cat(){} }; const Cat cat; std::move(cat); //this is valid in C++11 当我调用时std::move,表示我想移动对象,即我将更改对象。移动const对象是不合理的,那么为什么不std::move限制这种行为呢?将来会成为陷阱,对吗? 陷阱的含义如布兰登在评论中所述: “我认为他的意思是它“诱捕”他偷偷摸摸的偷偷摸摸,因为如果他不知道,他最终会得到一份不是他想要的副本。” 在斯科特·迈耶斯(Scott Meyers)的著作《有效的现代C ++》中,他举了一个例子: class Annotation { public: explicit Annotation(const std::string text) : value(std::move(text)) //here we want to call string(string&&), //but because text is const, //the return type of std::move(text) is …
113 c++  c++11 



8
最好的C ++模板元编程介绍?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow 的主题。 3年前关闭。 改善这个问题 静态元编程(也称为“模板元编程”)是一种很棒的C ++技术,它允许在编译时执行程序。阅读以下规范元编程示例后,一个灯泡突然在我的头上掉了: #include <iostream> using namespace std; template< int n > struct factorial { enum { ret = factorial< n - 1 >::ret * n }; }; template<> struct factorial< 0 > { enum { ret = 1 }; }; int main() { cout …

4
cout是否同步/线程安全?
通常,我假定流不同步,这取决于用户进行适当的锁定。但是,诸如此类的事情cout在标准库中得到特殊对待吗? 也就是说,如果正在写入多个线程,它们是否cout可以破坏cout对象?我了解,即使同步,您仍然会获得随机交错的输出,但是可以保证交错。也就是说,cout从多个线程使用安全吗? 该供应商依赖吗?gcc是做什么的? 重要提示:如果您回答“是”,请提供某种参考,因为我需要某种证明。 我也不在乎底层的系统调用,这些很好,但是流在顶部增加了一层缓冲。
112 c++  gcc  c++11 

20
您如何遍历std :: tuple的元素?
我如何遍历一个元组(使用C ++ 11)?我尝试了以下方法: for(int i=0; i<std::tuple_size<T...>::value; ++i) std::get<i>(my_tuple).do_sth(); 但这不起作用: 错误1:抱歉,未实现:无法将“侦听器...”扩展为固定长度的参数列表。 错误2:我无法出现在常量表达式中。 那么,如何正确遍历元组的元素?


9
为什么将未使用的返回值强制转换为无效?
int fn(); void whatever() { (void) fn(); } 是否有任何理由将未使用的返回值转换为空,还是我认为这完全是浪费时间? 跟进: 好吧,这似乎很全面。我想这比注释未使用的返回值要好,因为自我记录代码比注释要好。我个人将关闭这些警告,因为这是不必要的噪音。 如果一个错误因它而逃脱,我会吃我的话。
112 c++  c  void 

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.