现代C++的功能在多大程度上如下:
用于游戏工作室?我很想知道库的名称和它们使用的C++特性.例如,Orge3D使用所有现代C++功能,包括异常和智能指针.换句话说,如果我要使用现代C++寻找游戏库的示例,我会去Orge3D.但我不知道这些功能是否会阻止游戏工作室使用Orge3D.
此外,我不知道是否还有其他例子.例如,我在一段时间之前使用过Box2D,但它只使用了placement new和class关键字作为C++特性.由于所有成员都是公开的,因此即使封装也在这些类中被打破.
理想情况下,如果C++功能最适合所有情况,那么最常使用这些功能.但似乎没有.阻抗是什么?显而易见的是必须阅读一摞书,但这只是半个原因.这个问题是对" 游戏编程的C++ - 爱还是不信任? " 的后续跟进(从回答中我得到的印象是许多C++特性仍未在游戏中使用;这不一定是应该的方式).
虽然C++标准委员会努力定义其复杂但强大的功能并保持其与C的向后兼容性,但根据我的个人经验,我发现由于缺乏工具,C++编程的许多方面都很麻烦.
例如,我最近尝试重构一些C++代码,用T&替换了许多shared_ptr,以删除大型库中不需要的指针用法.我必须手动执行几乎整个重构,因为没有任何重构工具可以帮助我安全地执行此操作.
使用调试器处理STL数据结构就像是在不同意时掏出陌生人的电话号码.
根据您的经验,C++缺少哪些重要的开发人员工具?
显然 hold_any有比...更好的表现boost::any.它是如何设法做到这一点的?
我们希望在桌面GUI中包含数据可视化(主要是时间轴和图形;可点击,可拖动).我们希望限制开源,非copyleft C++库,允许商业使用,并可在许多平台上移植.我可以使用哪个库?我们的GUI基于WxWidgets.
您是否使用过英特尔Vtune分析仪等任何分析工具?
您对Linux和Windows上的C++多线程应用程序有什么建议?我主要对缓存未命中,内存使用,内存泄漏和CPU使用率感兴趣.
我使用valgrind(仅在UNIX上),但主要用于查找内存错误和泄漏.
我正在尝试重载全局运算符new和删除性能敏感的应用程序.我已经阅读了http://www.informit.com/articles/article.aspx?p=30642&seqNum=3中描述的问题以及使用英特尔TBB分配器的建议http://www.intel.com/technology/itj/ 2007/v11i4/5-基金会/ 5-memory.htm
由于我第一次超载新的和删除,我有几个问题.
我应该在包含"新"调用的所有文件中包含我的新标题Allocator.h(或Pre.h),其中包含重载的新函数吗?这很乏味.
或者我应该在每个翻译单元中使用包含Allocator.h(之前)的"gcc -include Allocator.h ..."?我希望尽可能保持代码平台的独立性.所有编译器都支持类似于"gcc -include"的东西吗?
您是否了解用于GUI的C++ 中强制定向布局的开源实现?优选BSD/MIT/Apache或其他(非GPL)许可.
来自http://www.boost.org/community/implementation_variations.html
"...编码差异,例如将类从虚拟成员更改为非虚拟成员或删除间接级别不太可能产生任何可衡量的差异,除非深入内部循环.即使在内部循环中,现代CPU经常执行此类操作在相同数量的时钟周期内竞争代码序列!"
我试图理解"甚至在内循环"部分.具体来说,CPU在相同数量的时钟周期内执行哪些机制来执行两个代码(虚拟与非虚拟或额外的间接级别)?我知道指令流水线和缓存,但是如何在与非虚拟调用相同的时钟周期内执行虚拟调用?间接是如何"丢失"的?
我有一个env.sh包含诸如 之类的语句的shell 脚本export ENV_VAR1 = 1。在 Linux 终端上,我可以使用. env.sh或source env.sh来设置环境变量。
如何通过 Visual Studio Code (VSCode) 设置环境变量env.sh?
我尝试了多种方法:
1)我/usr/share/code/code在获取脚本后启动(VSCode - ),如下所示
. env.sh
/usr/share/code/code
2)我使用扩展“自动运行命令”. env.sh在工作区加载时调用。
但这些都不起作用。例如,在使用 Jupyter 扩展时,import matplotlib即使当我在上面的 Linux 终端内使用 Python 解释器时导入工作正常,我也会收到错误。
以下代码无法编译,说"错误C2248:'A :: getMe':无法访问类'A'中声明的私有成员".为什么?我试图调用公共接口.
class B
{
};
class A
{
public:
const B& getMe() const;
private:
B& getMe();
};
int main()
{
A a;
const B& b = a.getMe();
return 0;
}
Run Code Online (Sandbox Code Playgroud) c++ ×9
performance ×2
boost-spirit ×1
build-tools ×1
force-layout ×1
linux ×1
open-source ×1
profiling ×1
python ×1