直到现在我才真正尝试过.是否可以在没有类的情况下在命名空间范围内使用静态?为什么不?
namespace MyNamespace
{
static int a;
}
assign something, somewhere else....
Run Code Online (Sandbox Code Playgroud) !特定于常用的方法,如getter和setter.!
我不知道何时inline应该使用关键字.我知道它的作用,但我仍然不知道.
根据Bjarne Stroustrup的采访,他说:
我自己的经验法则是使用内联(显式或隐式)仅用于我知道经常使用的简单的单行或双行函数,并且多年来不太可能发生太大变化.就像vector的size()函数一样.内联的最佳用途是函数,其中body的代码少于函数调用和返回机制,因此内联函数不仅比非内联版本更快,而且在对象内核中更紧凑:更小更快.
但是我经常读到编译器会自动内联短函数,比如getter,setter方法(在这种情况下得到的size()是a vector).
有人可以帮忙吗?
编辑:
多年来回到这一点并且更多地体验高性能C++ +编程,内联确实可以提供帮助.在游戏行业工作甚至强制在线有时会有所作为,因为并非所有编译器都能正常工作.有些可能会自动内联,有些则不会.我的建议是,如果您使用框架,库或任何使用频繁的代码考虑使用内联,但这只是一般建议,因为您希望这些代码完全针对任何编译器进行优化.始终使用内联可能不是最好的,因为您还需要这部分代码的类定义.如果您不能再使用前向声明,有时这会增加编译时间.
另一个提示:即使分离了函数定义,你也可以使用C++ 14自动返回类型推导:
MyClass.h
class MyClass
{
int myint;
public:
auto GetInt() const;
}
inline auto MyClass::GetInt() const { return myint; }
Run Code Online (Sandbox Code Playgroud)
所有在.h文件中.
Release Build是否总是比Debug版本更快(因为,版本构建正在优化很多)?,即使我编写了最快的性能代码?
或者是否可以编写C++代码(使用调试),这与发布版本一样快?
我只是好奇我的代码是否太慢,因为当我进行性能测试时,我注意到了一个可观的差异.
我有以下问题:
void MyClass::LoopFunction(vector<Item>& items,void (MyClass::*funcy)(vector<Item>&,int))
{
for(SInt32 i = 0; i < 50; i++)
{
funcy(items,i);
}
}
Run Code Online (Sandbox Code Playgroud)
它说:
Called object type 'void(MyClass::*)(vector<Item>&,int)' is not a function or function pointer
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我找到解决方案吗?
据我所知,最好使用智能指针,而不是通过原始指针管理动态分配对象的生命周期,例如: MyObject* obj = new Object();
但是在某些框架/库中,它们总是返回/使用原始指针而不是智能指针(也许它们有自己的GC对象?我不知道).
它也更容易使用
MyObject* obj = GetAObject(); // return raw owning pointer
Run Code Online (Sandbox Code Playgroud)
比
SharedPointer<MyObject> obj = GetAObject(); // return smart pointer
Run Code Online (Sandbox Code Playgroud)
应该总是使用智能指针而不是手动new/ delete(如上例所示),还是应该使用原始资源拥有指针?
返回静态成员变量的引用是否有任何问题?(参考避免复制成本)
Vector接受4个参数(x,y,z,w);
.H
class MyClass
{
private:
static const Vector POS;
}
Run Code Online (Sandbox Code Playgroud)
的.cpp
const Vector MyClass::POS(100,300,0,0);
const Vector& MyClass::GetVector()
{
return POS;
}
Run Code Online (Sandbox Code Playgroud)