const int func(int a){...}; // 1 int const func(int a){...}; // 2 int func(int a) volatile {...}; // 3
1番と2番は全く同じ意味ですよね?
これは返り値がconstになる・・・??という意味ですか??
3番めはメンバ関数にできることですが、これは・・・この関数が呼び出されている間だけメンバ変数を最適化抑止するという意味ですか??
1番と2番については紛らわしくなりそうです。
例えば
constexpr int func(){...};
constexpr関数になりますが・・・これだと変数を修飾しているように見えませんか??
以下のほうが関数を修飾しているように見えません??
int constexpr func(){...};
逆に、以下のようにすると、関数全体を最適化抑止しているのかな??という風に見えませんか??
volatile int func(){...};
これも返り値が最適化抑止ということですよね??
なんか紛らわしいですね・・・
inlineにも同じことが言えそうなんですが・・・
noexceptもわかりにくいです。
int noexcept func(){...}; // ERROR!!! 前には書けない。
noexceptの場合は、上記はダメでした。
お尻のほうに書かないといけないようです。
例外を送出しない関数なら前に書いたほうが良いような気がするんですが・・・
リンク内容
mutable const volatile inline など細かく分類されているようです。
修飾子と指定子の違いがよく分かりません。
記述する場所もイマイチはっきりしていません。
先頭に記述する場合と後ろに記述する場合の違いがよくわからないです。
修飾したい対象のものの直前と統一すれば分かりやすいと考えています。
しかし実際にはそうなっていないですよね。
どなたか教えてください。
わかりにくい。
予約語によって記述箇所が異なるので、全パターン覚えないといけないんですかね?
環境は Linux 64bit gcc です。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/25 00:56 編集
2018/01/25 01:03
2018/01/25 04:01
2018/01/25 04:05
2018/01/25 04:10 編集
2018/01/25 07:39 編集
2018/01/25 07:37
2018/01/25 08:31
2018/01/25 10:11
2018/01/25 13:28
2018/01/25 13:38
2018/01/25 13:45
2018/01/25 13:48
2018/01/25 13:51
2018/01/25 13:54
2018/01/25 13:58
2018/01/25 14:07
2018/01/25 14:13
2018/01/26 14:12 編集
2018/01/26 14:23 編集
2018/01/26 15:17
2018/01/26 15:36
2018/01/26 15:46
2018/01/26 18:43 編集
2018/01/27 01:56
2018/01/27 07:19
2018/01/27 09:08
2018/01/27 09:25