当你编写一些自给自足的脚本时,使用它if __name__ == '__main__'作为编写测试的地方是一个坏主意吗?
我正在开发一个使用Python扩展/编写脚本的C++应用程序.当然,C++通常比Python快得多,但这是否意味着您应该尽可能多地使用Python代码执行C++代码?
我问这个是因为我不确定,在用C++编写的代码和用Python编写的代码之间切换控制是否有任何性能成本?我是否应该在任何场合使用用C++编写的代码,或者我应该避免回调C++来完成简单的任务,因为执行C++代码可能带来的任何速度增益都超出了语言之间切换的成本?
编辑:我应该说清楚,我不是要求它实际解决问题.我纯粹是出于好奇而问,这是值得记住的未来.所以我对替代解决方案不感兴趣,我只想从技术角度了解答案.:)
在C++中,您可以使用模板同时拥有通用容器和类型安全容器.但是在C中,如果你想要通用容器,你必须(afaik)使用void*,这意味着你失去了类型安全性.要拥有类型安全的容器,您必须为要保留的每种类型的数据重新实现它们.
鉴于C遵循比C++ 更多的程序员知道他所做的理念,在C中做什么更惯用的事情:使用通用容器void*,或为每种类型的数据制作自定义容器?
我正在尝试使用两个静态链接库编译我的程序:SFML和PhysFS.但是,在链接阶段,我收到以下错误:
eror LNK2005:_inflatePrime已在sfml-graphics-s.lib(inflate.obj)中
定义错误LNK2005:_inflateGetHeader已在sfml-graphics-s.lib(inflate.obj)中
定义错误LNK2005:_adler32_combine已在sfml-graphics-s中定义.lib(adler32.obj)
错误LNK2005:_crc32_combine已在sfml-graphics-s.lib(crc32.obj)中
定义错误LNK1169:找到一个或多个多重定义的符号
当两个完全不相关的图书馆出现这种冲突时,我该怎么办?
编辑:哦,请 - 请告诉我,我不打算写一个包装.我已经厌倦了要把事情搞定,我只想写自己的代码.:(
在C++中是否有任何有效的方法来生成类的唯一ID,而不是实例?我正在寻找这种简单程度的东西(这会为每个实例生成一个ID,而不是为每个类类型生成一个ID):
MyClass::MyClass()
{
static unsigned int i = 0;
id_ = i++;
}
Run Code Online (Sandbox Code Playgroud)
编辑:为什么我想要唯一的ID.
我正在写一个游戏.我游戏中的所有实体都会有不同的状态(左转,跳跃,站立等); 这些状态在类中定义.每个州都需要拥有自己的ID,以便我可以识别它.
typeid在生产代码中使用通常被认为是不好的做法吗?此外,我注意到typeid返回type_info,其中包括一些元数据(例如带有类型名称的字符串); 有没有办法停用这个?
class Person(object):
pass
Run Code Online (Sandbox Code Playgroud)
class Person:
pass
Run Code Online (Sandbox Code Playgroud)
对象声明有什么作用?你应该用吗?我有两个程序都有这两个程序,并不知道它正在制造的差异.如果有人能解释这个概念请.
在C++中,当你在下面看到的内容时,是否保证了构造的顺序?
Logger::Logger()
: kFilePath_("../logs/runtime.log"), logFile_(kFilePath_)
{
// ...
}
Run Code Online (Sandbox Code Playgroud) 我知道在C++ 11之前,auto关键字具有完全不同的含义; 它是一个存储类型说明符,指示具有自动存储类型的对象(即放置在堆栈上).
理论就是这样......你将如何实际使用这个关键字(语法),为什么?另外,我还没有在实际代码中看到这个关键字pre-C++ 11; 什么时候有用(什么时间段)?
c++ ×6
python ×3
performance ×2
algorithm ×1
auto ×1
c ×1
c++03 ×1
c++11 ×1
containers ×1
d ×1
history ×1
idioms ×1
inheritance ×1
oop ×1
typeid ×1
unit-testing ×1