Questions tagged «c++»

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

5
在C和C ++中使用逗号代替分号的效果
在重构C和C ++的各种代码时,我注意到很多时候使用逗号而不是分号来分隔语句。像这样的东西; int a = 0, b = 0; a = 5, b = 5; 我本来期望的 int a = 0, b = 0; a = 5; b = 5; 我知道C和C ++允许使用逗号分隔语句(特别是循环头),但是这两段代码之间有什么区别?我的猜测是逗号是剪切和粘贴的结果,但这是一个错误,会影响执行吗?
70 c++  c 

14
Py_Initialize失败-无法加载文件系统编解码器
我试图将使用嵌入式python 3.2解释器的简单c ++测试项目放在一起。项目构建良好,但是Py_Initialize引发了致命错误: Fatal Python error: Py_Initialize: unable to load the file system codec LookupError: no codec search functions registered: can't find encoding 最小代码: #include <Python.h> int main (int, char**) { Py_Initialize (); Py_Finalize (); return 0; } 操作系统是32位Vista。 使用的python版本是python 3.2调试版本,使用VC ++ 10从源代码构建。 来自同一构建的python_d.exe文件可以正常运行。 有人可以解释这个问题以及如何解决吗?我自己的google-fu使我失望。 编辑1 经过python源代码后,我发现,如错误所示,尚未注册任何编解码器搜索功能。两者codec_register和PyCodec_Register应有的状态。只是在代码中没有任何这些函数被调用。 我真的不知道这意味着什么,因为我仍然不知道应该在何时何地调用这些函数。我的其他python版本(3.1.3)的源代码中完全缺少引发错误的代码。 编辑2 在下面回答了我自己的问题。
70 c++  python 

11
为什么此reinterpret_cast无法编译?
我知道这样做reinterpret_cast很危险,我只是在做测试。我有以下代码: int x = 0; double y = reinterpret_cast<double>(x); 当我尝试编译程序时,它给我一个错误提示 从“ float”类型到“ double”类型的无效转换 这是怎么回事?我以为reinterpret_cast是可以用来将苹果转换为潜艇的流氓演员,为什么这个简单的演员不能编译?

8
如果递增等于STL容器的最终迭代器的迭代器会发生什么
如果将指向向量的最后一个元素的迭代器加2,该怎么办?在这个问题中,如何通过2个元素将迭代器调整为STL容器,提供了两种不同的方法: 要么使用一种形式的算术运算符-+ = 2或++两次 或使用std :: advance() 当迭代器指向STL容器的最后一个元素或其他元素时,我已经用VC ++ 7测试了它们的边缘情况: vector<int> vec; vec.push_back( 1 ); vec.push_back( 2 ); vector<int>::iterator it = vec.begin(); advance( it, 2 ); bool isAtEnd = it == vec.end(); // true it++; // or advance( it, 1 ); - doesn't matter isAtEnd = it == vec.end(); //false …
70 c++  stl  vector  iterator 

7
删除循环内向量的元素
我知道也有与此类似的问题,但是我没有设法借助他们的帮助在我的代码中找到出路。我只想通过在循环内检查此元素的属性来删除/删除向量的元素。我怎样才能做到这一点?我尝试了以下代码,但收到了模糊的错误消息: “播放器=”功能在“播放器”中不可用。 for (vector<Player>::iterator it = allPlayers.begin(); it != allPlayers.end(); it++) { if(it->getpMoney()<=0) it = allPlayers.erase(it); else ++it; } 我该怎么办? 更新:您是否认为带有指针成员的问题vector :: erase属于同一问题?因此,我需要一个赋值运算符吗?为什么?
70 c++  vector  erase 

3
在CMake中添加多个可执行文件
我在C ++项目中的代码组织如下 我有几个.cpp和.h文件,其中包含我的班 我有几个.cxx文件必须针对这些.cpp文件和一些外部库进行编译。 现在,每个.cxx文件都有一个main()方法,因此我需要为每个文件添加与文件名称相同的不同可执行文件。 同样,这些.cxx文件可能不会链接到相同的外部库。 我想用CMake编写这个版本,我是一个新手,我该如何处理?
70 c++  build  cmake  executable 

3
是否存在static_warning?
我知道这个问题提到了Boost的“ STATIC WARNING”,但是我想再次提一个问题,特别是我如何实现一个static_warning操作类似于a的操作,static_assert但仅在编译时发出警告,而不是中止编译错误。 我想要类似于Alexandrescu提出的在C ++ 11之前的静态断言的提议,该提议以某种方式设法打印了一些有用的上下文信息作为错误的一部分。 要求用户启用某些标准的编译器警告以使此构造起作用(可能是“无效的指针转换”或“违反严格的别名规则”),这是可以接受的-无论如何,任何应作为常规编译一部分的警告都可以使用。 简而言之,我想static_warning(false, "Hello world");创建一个编译器警告,该警告应以某种方式在警告消息中包含字符串“ hello world”。在GCC和MSVC中,这可能吗?如何? 对于任何特别聪明的解决方案,我都会很高兴地给予小额奖励。 作为一点解释:在考虑这个问题时,我想到了一个主意:静态警告将是跟踪复杂模板专业化的编译时过程的有用方法,否则很难调试。静态警告可以用作编译器发出“我正在编译这部分代码”的简单信标。 更新。理想情况下,将在以下设置中触发警告: template <typename T> struct Foo { static_warning(std::is_pointer<T>::value, "Attempting to use pointer type."); // ... }; int main() { Foo<int> a; Foo<int*> b; }

3
GoogleTest与CppUnit:事实
在接下来的几年中设置C ++单元测试框架的过程中,我们选择了GoogleTest和CppUnit。我对两者都有一定的经验,我的首选是GoogleTest。无论如何说服我的老板我需要一些事实,所以我在互联网上做了一些阅读,包括手册,维基页面和一些资源。我想出了GoogleTest优势和一个CppUnit优势(图形测试运行程序)的列表。在这里,它们按感知的有用性排序: INSTANTIATE_TEST_CASE_P用您想要的任何参数集(包括笛卡尔乘积)实例化测试用例 FRIEND_TEST,用于测试私有类成员(适用于所有旧版代码) 将断言变成断点 非致命断言 “开箱即用” googlemock集成 自动测试检测,无需枚举 可以禁用和启用测试 可以使用名称模式选择要运行的测试 值/类型参数化测试 用户定义的谓词断言 死亡测试 更加丰富的断言 类型断言 在子程序上断言 可以使用<<将其他调试信息添加到断言中 RecordProperty向XML输出发出属性的最后一个值 SCOPED_TRACE帮助理解断言失败的上下文,该断言来自子例程或循环内部。 Jenkins可以立即显示xUnit XML输出,而无需在两者之间进行XSLT转换 支持自定义类型的打印机 测试指示所消耗的时间(我怀疑这对于CppUnit也可行,但我还没有弄清楚) 测试事件侦听器API(用户定义的插件) 测试改组 没有例外,RTTI 我假设CppUnit不支持以上所有内容是否正确?是否有一个有用的功能GoogleTest无法在CppUnit的我失踪? 最后但并非最不重要的一点:GoogleTest是否缺少任何出色的CppUnit功能? 谢谢!

18
如何获取当前目录?
我已经在C#和Delphi中进行了此操作,但是C ++是邪恶的。目的是在当前目录(正在运行可执行文件的位置)中创建一个文件。 我的代码: LPTSTR NPath = NULL; DWORD a = GetCurrentDirectory(MAX_PATH,NPath); HANDLE hNewFile = CreateFile(NPath,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); 我在GetCurrentDirectory()获得异常。 请告诉我为什么会出现异常,如何使它在C ++中更容易?
70 c++  windows 


4
什么是内在函数?
Наэтотвопросестьответына堆栈溢出нарусском:Чтотакоеинтринсики(内在)? 谁能解释它们是什么以及为什么我需要它们?如果需要使用内部函数,我将构建哪种应用程序?
70 c++  c  intrinsics 

2
为什么在C ++ 20中的依赖类型之前不需要指定“ typename”?
这部分代码在C ++ 20中编译(使用gcc 10.1),而typename在依赖类型之前未使用关键字std::vector<T>::iterator。为什么要编译? #include <vector> template<typename T> std::vector<T>::iterator // Why does this not require "typename" before it? f() { return {}; } int main() { auto fptr = &f<int>; } 代码游乐场

11
PCH警告:标头停止不能在宏或#if块中-Visual C ++ 2010 Express SP1
这是从可能正在运行的网站粘贴的。我进行了一些谷歌搜索,发现我现在遇到的问题是我今天下载的Visual C ++ 2010 SP1的结果,现在出现此错误: PCH Warning: header stop cannot be in a macro or #if block. 希望有人能够帮助我! #ifndef APP_STATE_H #define APP_STATE_H #include "Framework.h" class AppState; //this line is giving me the error //define two classes #endif Framework.h: #ifndef OGRE_FRAMEWORK_H #define OGRE_FRAMEWORK_H #include <OgreCamera.h> #include <OgreEntity.h> #include <OgreLogManager.h> #include <OgreOverlay.h> …
70 c++  visual-c++ 

1
如何从C ++插件中的'MediaStream'对象读取音频数据
经过流血和眼泪,我终于设法建立了一个Node C ++附加组件,并将一个Web平台标准MediaStream对象永久地推入其C ++方法之一。为了在不同的V8和Node.js版本之间实现兼容性,我将原生抽象用于Node.js(nan): 插件 NAN_METHOD(SetStream) { Nan::HandleScope scope; v8::Local<v8::Object> mediaStream = info[0]->ToObject(); } addon.js setStream(new MediaStream()); 对于它的价值,它可以正常工作(即,它不会消除渲染器进程的视线),并且我可以验证MediaStream对象的存在,例如,通过从C ++方法返回其构造函数名称: 插件 info.GetReturnValue().Set(mediaStream->GetConstructorName()); 当从JavaScript通过调用时setStream,这将返回字符串MediaStream,因此该对象肯定在那里。我还可以返回mediaStream对象本身,并且一切都会正常运行,因此确实是我需要的对象。 那么,我将如何MediaStream在C ++中从此对象读取音频数据(即音频样本)?附带说明一下,实际的数据读取(和处理)将在单独的中完成std::thread。 赏金更新 我知道,如果我自己编译Electron和/或Chromium,这样做会更容易/可行,但我不想参与该维护工作。 我想知道是否可以不这样做,就我的研究而言,我深信我需要两件事来完成此任务: 相关的头文件,我相信会公开应该足够了 铬/闪烁库文件(?),用于解析外部符号,类似于node.dylib文件 而且,正如我所说,我相信自己可以自己编译Chrome / blink,然后获得这个lib文件,但这将为Electron带来麻烦。考虑到这一点,我相信这个问题最终可以归结为C ++链接问题。还有其他方法可以做我想要的吗? 编辑 在我的案例中,ScriptProcessorNode不是一个选择,因为它的性能使其在生产中几乎无法使用。这将需要在ui / main线程上处理音频样本,这绝对是疯狂的。 编辑2 AudioWorklets在Electron中已经存在了一段时间,与ScriptProcessorNode(或更糟糕的是,AnalyzerNode)不同,具有低延迟并且对于实时C ++支持的音频处理来说非常可靠。 在我的应用程序(AudioNodes)中,我已经为实验性的VST插件主机原型(很可能是第一个Web Audio API)实现了这种方法。 如果有人想继续写一个基于AudioWorklet的答案,我会很乐意接受,但要提防:这是一个非常先进的领域,而且洞洞很深,即使在非常简单,通用的应用程序之前也要克服无数障碍传递原型(特别是因为当前在Electron中需要原子同步的缓冲跨线程音频处理才能实现此目的,因为https://github.com/electron/electron/issues/22503-尽管获取本机将C ++插件添加到一个音频渲染器线程(更不用说同时使用多个线程)可能同样具有挑战性。
70 javascript  c++  electron  v8  blink 


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.