2

boost::shared_ptr非常に頻繁に呼び出される可能性があり、単純にポインターを返すため、演算子は の良い候補ではありません->inlined?

T * operator-> () const // never throws
{
    BOOST_ASSERT(px != 0);
    return px;
}

inlineとにかく、優れたコンパイラは自動的にこれを行いますか?

これで睡眠を失う必要がありますか?:-)

4

3 に答える 3

18

Functions defined (i.e. with a body) inside a class are implicitly candidates for inlining. There is no need to use the inline keyword in these cases, and it is unusual to do so.

于 2010-05-18T14:41:25.887 に答える
4

Would a good compiler automatically inline this anyway?

Quite probably, yes, it would.

Should I lose any sleep over this?

Better not. If you want to be super-sure (or you are super-curious), check the assembly that's going out from your compiler.

于 2010-05-18T14:41:24.090 に答える
1

shared_ptrはクラステンプレートであるため、そのメンバ関数は実際には関数テンプレートであることに注意してください。

これらはexported ではないため、宣言するだけでなく 、ストレージ指定子で定義された関数のように、それらが使用されるすべての翻訳単位で定義する必要があります。inline

ある意味ではtemplateも意味しinlineます。

于 2011-10-07T10:15:09.520 に答える