Questions tagged «c++»

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

20
* .h或* .hpp用于类定义
我一直在*.h类定义中使用文件,但是在阅读了一些boost库代码之后,我意识到它们都使用了*.hpp。我一直对该文件扩展名有所厌恶,主要是因为我不习惯使用该文件扩展名。 使用*.hppover有*.h什么优点和缺点?
551 c++  header 


6
迭代器失效规则
C ++容器的迭代器失效规则是什么? 最好是摘要列表格式。 (注意:这本来是Stack Overflow的C ++ FAQ的一个条目。如果您想批评以这种形式提供FAQ的想法,则可以在开始所有这些操作的meta上进行发布。)该问题在C ++聊天室中进行监控,该问题最初是从FAQ想法开始的,所以提出这个想法的人很可能会读懂您的答案。)
543 c++  c++11  iterator  c++17  c++-faq 


13
为什么C ++编译需要这么长时间?
与C#和Java相比,编译C ++文件要花费很长时间。与运行正常大小的Python脚本相比,编译C ++文件花费的时间明显更长。我目前正在使用VC ++,但任何编译器都相同。为什么是这样? 我可以想到的两个原因是加载头文件并运行预处理器,但这似乎不能解释为什么要花这么长时间。



18
除了允许变量由const函数修改之外,“ mutable”关键字是否还有其他用途?
不久前,我遇到了一些代码,这些代码用mutable关键字标记了一个类的成员变量。据我所知,它只是允许您修改const方法中的变量: class Foo { private: mutable bool done_; public: void doSomething() const { ...; done_ = true; } }; 这是此关键字的唯一用途还是它所不及的?此后,我在一个类中使用了此技术,将a标记boost::mutex为可变的,允许const函数出于线程安全的原因将其锁定,但是,老实说,这有点像hack。
527 c++  keyword  mutable 


13
将C ++模板函数定义存储在.CPP文件中
我有一些模板代码,希望将其存储在CPP文件中,而不是内联在标头中。我知道只要您知道将使用哪种模板类型就可以做到。例如: .h文件 class foo { public: template <typename T> void do(const T& t); }; .cpp文件 template <typename T> void foo::do(const T& t) { // Do something with t } template void foo::do<int>(const int&); template void foo::do<std::string>(const std::string&); 请注意最后两行-foo :: do模板函数仅与ints和std :: strings一起使用,因此这些定义意味着该应用程序将链接。 我的问题是-这是一个讨厌的黑客,还是可以与其他编译器/链接器一起使用?目前,我仅将此代码与VS2008一起使用,但希望将其移植到其他环境。
526 c++  templates 

30
进行浮动和双重比较的最有效方法是什么?
比较两个double或两个float值的最有效方法是什么? 简单地这样做是不正确的: bool CompareDoubles1 (double A, double B) { return A == B; } 但是类似: bool CompareDoubles2 (double A, double B) { diff = A - B; return (diff < EPSILON) && (-diff < EPSILON); } 似乎是废物处理。 有人知道更聪明的浮点比较器吗?


17
如何在C ++中初始化私有静态成员?
在C ++中初始化私有静态数据成员的最佳方法是什么?我在头文件中尝试了此操作,但它给了我奇怪的链接器错误: class foo { private: static int i; }; int foo::i = 0; 我猜这是因为我无法从类外部初始化私有成员。那么最好的方法是什么?



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.