Questions tagged «c++»

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

13
与std :: map等效的remove_if
我试图根据特定条件从地图中删除一系列元素。我该如何使用STL算法? 最初我想使用,remove_if但是由于remove_if对于关联容器不起作用,因此无法使用。 是否有适用于地图的“ remove_if”等效算法? 作为一个简单的选择,我想到了遍历映射和擦除。但是在地图上循环并擦除一个安全的选项吗?(因为迭代器在擦除后变得无效) 我使用以下示例: bool predicate(const std::pair<int,std::string>& x) { return x.first > 2; } int main(void) { std::map<int, std::string> aMap; aMap[2] = "two"; aMap[3] = "three"; aMap[4] = "four"; aMap[5] = "five"; aMap[6] = "six"; // does not work, an error // std::remove_if(aMap.begin(), aMap.end(), predicate); std::map<int, std::string>::iterator iter …
118 c++  stl  map 

10
Pimpl成语vs Pure虚拟类接口
我想知道什么会使程序员选择Pimpl习惯用语或纯虚拟类和继承。 我知道pimpl习惯用法为每个公共方法和对象创建开销提供了一个显式的额外间接。 另一方面,Pure虚拟类带有用于继承实现的隐式indirect(vtable),据我了解,没有对象创建开销。 编辑:但是,如果您从外部创建对象,则需要工厂 是什么使纯虚拟类比pimpl惯用语更不受欢迎?

27
CMake找不到Visual C ++编译器
安装Visual Studio 2015并在以前的项目上运行CMake之后,CMake错误指出无法找到C编译器。 The C compiler identification is unknown The CXX compiler identification is unknown CMake Error at CMakeLists.txt:4 (PROJECT): No CMAKE_C_COMPILER could be found. CMake Error at CMakeLists.txt:4 (PROJECT): No CMAKE_CXX_COMPILER could be found. 我去cl.exeVisual Studio文件夹中搜索,C:\Program Files\Microsoft Visual Studio 14.0但找不到它。 如何设置CMake以在Windows和Visual Studio 2015上运行?

3
为C ++配置Vim
我想将vim做成我的C ++编辑器。我很少有使用它的经验,并且在配置vim以与C ++一起使用时需要帮助。我需要这样的功能 代码完整(对于stl和我的课程) 在.cc和.h文件之间切换 可能是C ++和vim专家提供的更多技巧。 也许您可以提供一些配置(包括说明),或者可以使用的教程,插件的链接?
118 c++  vim  configuration 

4
#include在.h或.c / .cpp中?
使用C或C ++进行编码时,我应该在哪里#include? callback.h: #ifndef _CALLBACK_H_ #define _CALLBACK_H_ #include <sndfile.h> #include "main.h" void on_button_apply_clicked(GtkButton* button, struct user_data_s* data); void on_button_cancel_clicked(GtkButton* button, struct user_data_s* data); #endif callback.c: #include <stdlib.h> #include <math.h> #include "config.h" #include "callback.h" #include "play.h" void on_button_apply_clicked(GtkButton* button, struct user_data_s* data) { gint page; page = gtk_notebook_get_current_page(GTK_NOTEBOOK(data->notebook)); ... 应该全部包含在.h或.c / …
118 c++  c 

2
将向量初始化为零C ++ / C ++ 11
我知道在C ++ 11中,他们添加了将变量初始化为零的功能 double number = {}; // number = 0 int data{}; // data = 0 是否有类似的方法将std::vector固定长度的a 初始化为全零?
118 c++  c++11 

7
在Visual Studio C ++ 2010中找不到或打开PDB文件
我使用Visual Studio 2010 C ++,并且我的项目构建没有错误,但是运行它时我得到了。我在Windows XP上。 'Shaders.exe': Loaded 'C:\Documents and Settings\User\My Documents\Visual Studio 2010\Projects\Shaders\Win32\Debug\Shaders.exe', Symbols loaded. 'Shaders.exe': Loaded 'C:\WINDOWS\system32\ntdll.dll', Cannot find or open the PDB file 'Shaders.exe': Loaded 'C:\WINDOWS\system32\kernel32.dll', Cannot find or open the PDB file 'Shaders.exe': Loaded 'C:\qt-everywhere-opensource-src-4.8.3\bin\QtCored4.dll', Symbols loaded. 'Shaders.exe': Loaded 'C:\WINDOWS\system32\user32.dll', Cannot find or open the PDB …

4
For循环在自己的花括号内
我遇到了这种for循环布局: #include <iostream> int main() { { for (int i = 0; i != 10; ++i) { std::cout << "delete i->second;" << std::endl; } } { for (size_t i = 0; i < 20; ++i) { std::cout << "delete m_indices[i];" << std::endl; } } return 0; } 我想知道这多余的括号是干什么用的?这在我们的代码库中出现了几次。
117 c++  for-loop  scope 

7
C ++ 11中COW std :: string实现的合法性
据我了解,写时复制不是std::string在C ++ 11中实现符合性的可行方法,但是最近在讨论中出现时,我发现自己无法直接支持该声明。 我是否正确C ++ 11不允许基于COW的实现std::string? 如果是这样,此限制是否在新标准的某处(何处)明确说明? 或暗示此限制,是因为新要求的综合影响std::string使不能基于COW的实现std::string。在这种情况下,我会对“ C ++ 11有效禁止基于COW的std::string实现” 一章和诗句样式的衍生感兴趣。


3
为什么C ++编译器不将此条件布尔分配优化为无条件分配?
考虑以下功能: void func(bool& flag) { if(!flag) flag=true; } 在我看来,如果flag具有有效的布尔值,则相当于将其无条件设置为true,如下所示: void func(bool& flag) { flag=true; } 然而,gcc和clang都不以这种方式对其进行优化-两者都在-O3优化级别上生成以下内容: _Z4funcRb: .LFB0: .cfi_startproc cmp BYTE PTR [rdi], 0 jne .L1 mov BYTE PTR [rdi], 1 .L1: rep ret 我的问题是:只是代码太特殊而无法优化,还是有充分的理由说明为什么这种优化是不必要的(如果flag没有引用的话)volatile?似乎唯一的原因可能是在读取时flag可能以某种方式具有非true-或- false值而没有未定义的行为,但是我不确定这是否可能。
117 c++  optimization 

1
为了避免昂贵的线程创建,C ++ 11中的async(launch :: async)是否会使线程池过时?
它与以下问题大致相关:std :: thread是否在C ++ 11中池化?。尽管问题有所不同,但目的是相同的: 问题1:使用自己的(或第三方库)线程池来避免创建昂贵的线程是否仍然有意义? 另一个问题的结论是,您不能依靠std::thread被池化(它可能会也可能不会)。但是,std::async(launch::async)似乎有更高的机会被合并。 它不认为这是标准的强制要求,但是恕我直言,我希望所有好的C ++ 11实现都可以在线程创建缓慢的情况下使用线程池。我希望仅在廉价的平台上创建新线程,我希望它们总是产生新线程。 问题2:这就是我的想法,但我没有事实可以证明。我很可能会误会。这是有根据的猜测吗? 最后,在这里,我提供了一些示例代码,这些代码首先显示了我认为如何通过async(launch::async)以下方式表达线程创建: 范例1: thread t([]{ f(); }); // ... t.join(); 变成 auto future = async(launch::async, []{ f(); }); // ... future.wait(); 示例2:触发并忘记线程 thread([]{ f(); }).detach(); 变成 // a bit clumsy... auto dummy = async(launch::async, []{ f(); }); // ... but …

14
在学习C ++之前应该学习C吗?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我今天在开放日参观了大学CS系,在实验室参观中我们坐下来参加了一些本科生的期末项目。一个特别好-一种FPS小行星游戏。我决定看一下src目录,以发现它是用C ++完成的(其他大多数项目都是Java 3D应用程序)。 我以前没有做过C,但是之前已经看过一些C代码。从我在该游戏的.cpp代码中看到的看,它看起来并没有太大不同。 我对学习C或C ++感兴趣,但稍后可能会学习其他。是否有任何优势,我一个学习之前,其他和如果是的话,哪一个?
117 c++  c 

11
当非const方法是私有方法时,为什么不调用public const方法?
考虑以下代码: struct A { void foo() const { std::cout << "const" << std::endl; } private: void foo() { std::cout << "non - const" << std::endl; } }; int main() { A a; a.foo(); } 编译器错误是: 错误:“ void A :: foo()”是私有的。 但是,当我删除私有文件时,它就可以工作。当非const方法为私有方法时,为什么不调用public const方法? 换句话说,为什么在访问控制之前要进行重载解析?这很奇怪。您认为这是一致的吗?我的代码可以工作,然后添加一个方法,而我的工作代码根本无法编译。

3
Visual Studio 2015没有cl.exe
我下载了Visual C ++和Visual Studio,但是找不到cl.exe编译C ++文件的方法。安装路径为C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ VC \ bin。 在哪里可以找到用于编译C ++代码的编译器?

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.