ホームページ  >  記事  >  バックエンド開発  >  `decltype(...)` は参照を返さないのに、`decltype((...))` は参照を返すのはなぜですか?

`decltype(...)` は参照を返さないのに、`decltype((...))` は参照を返すのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-02 04:31:30976ブラウズ

 Why Does `decltype((...))` Return a Reference While `decltype(...)` Doesn't?

decltype((...)) での括弧の重要性を理解する

decltype((...) での二重括弧の使用)) C 17 Function Definition Concurrency (FCD) の例で明らかなように、decltype 演算子によって推定される型に微妙ですが重要な影響を与えます。

括弧で囲まれていない識別子 (id-expression) に適用される場合またはクラス メンバーのアクセス式の場合、decltype は参照されるエンティティの型を返します。ただし、式が左辺値 (メモリの場所を参照する変数または式) の場合、decltype はエンティティの型の前に追加の参照 (&) を付加します。

FCD の例では:

  • decltype(a->x) は、クラス インスタンス (*a) のメンバー変数 (double x) を参照し、メンバーの基本型を返します: double.
  • decltype((a- >x)) は、同じメンバー アクセス式を括弧で囲み、左辺値として扱います。結果として、decltype は、double 型への参照である lvalue の型を返します: const double&.

以上が`decltype(...)` は参照を返さないのに、`decltype((...))` は参照を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。