小编jer*_*tus的帖子

静力学需要上课吗?

直到现在我才真正尝试过.是否可以在没有类的情况下在命名空间范围内使用静态?为什么不?

namespace MyNamespace
{
  static int a;
}

assign something, somewhere else....
Run Code Online (Sandbox Code Playgroud)

c++ static

5
推荐指数
1
解决办法
163
查看次数

内联在C++和编译器中

!特定于常用的方法,如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文件中.

c++ compiler-construction inline

3
推荐指数
1
解决办法
343
查看次数

发布构建与调试构建性能

Release Build是否总是比Debug版本更快(因为,版本构建正在优化很多)?,即使我编写了最快的性能代码?

或者是否可以编写C++代码(使用调试),这与发布版本一样快?

我只是好奇我的代码是否太慢,因为当我进行性能测试时,我注意到了一个可观的差异.

c++ debugging performance release

3
推荐指数
1
解决办法
6553
查看次数

函数指针不是函数或函数指针

我有以下问题:

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)

任何人都可以帮我找到解决方案吗?

c++ pointers function

3
推荐指数
1
解决办法
1551
查看次数

智能指针vs拥有原始指针

据我所知,最好使用智能指针,而不是通过原始指针管理动态分配对象的生命周期,例如: 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(如上例所示),还是应该使用原始资源拥有指针?

c++ pointers

0
推荐指数
2
解决办法
1003
查看次数

返回静态成员变量c ++的引用

返回静态成员变量的引用是否有任何问题?(参考避免复制成本)

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)

c++ static reference

0
推荐指数
1
解决办法
1662
查看次数