回答編集履歴
3
update
answer
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
|
12
12
|
`main`関数が意図通りに実装されていません。~~質問中にあるコードでは「`function::measure`クラスに値`function::able`を指定して一時オブジェクトを構築し、同一行内でそのオブジェクトを破棄」してしまいます。つまりコード区間の時間計測としては全く機能せず、常に`0 ms`と出力されるはずです。~~
|
13
13
|
|
14
|
-
訂正:
|
14
|
+
訂正:[Most Vexing Parse](https://en.wikipedia.org/wiki/Most_vexing_parse)(の複雑なケース)に該当します。構文的には`function::measure`型の変数`function::able`宣言と解釈されますが、これは意味論(セマンティクス)上は不正な宣言となるためコンパイルエラーとみなされます。StackOverfloaの[Most vexing parse with a qualified-id - or not?](https://stackoverflow.com/questions/28955859/)や[Is Type(::x); valid?](https://stackoverflow.com/questions/24623071/)もご参考に。
|
15
15
|
|
16
16
|
```cpp
|
17
17
|
int main() {
|
2
update
answer
CHANGED
@@ -9,8 +9,10 @@
|
|
9
9
|
----
|
10
10
|
> 記法をはじめとして、このコードに対する指摘・アドバイス
|
11
11
|
|
12
|
-
`main`関数が意図通りに実装されていません。質問中にあるコードでは「`function::measure`クラスに値`function::able`を指定して一時オブジェクトを構築し、同一行内でそのオブジェクトを破棄」してしまいます。つまりコード区間の時間計測としては全く機能せず、常に`0 ms`と出力されるはずです。
|
12
|
+
`main`関数が意図通りに実装されていません。~~質問中にあるコードでは「`function::measure`クラスに値`function::able`を指定して一時オブジェクトを構築し、同一行内でそのオブジェクトを破棄」してしまいます。つまりコード区間の時間計測としては全く機能せず、常に`0 ms`と出力されるはずです。~~
|
13
13
|
|
14
|
+
訂正:これは[Most Vexing Parse](https://en.wikipedia.org/wiki/Most_vexing_parse)(の複雑なケース)に該当します。構文的には`function::measure`型の変数`function::able`宣言と解釈されますが、これは意味論(セマンティクス)上は不正な宣言となるためコンパイルエラーとみなされます。StackOverfloaの[Most vexing parse with a qualified-id - or not?](https://stackoverflow.com/questions/28955859/)や[Is Type(::x); valid?](https://stackoverflow.com/questions/24623071/)もご参考に。
|
15
|
+
|
14
16
|
```cpp
|
15
17
|
int main() {
|
16
18
|
function::measure(function::able);
|
1
refinement
answer
CHANGED
@@ -6,9 +6,10 @@
|
|
6
6
|
|
7
7
|
(前提条件が偽のため、この質問はスキップします)
|
8
8
|
|
9
|
+
----
|
9
10
|
> 記法をはじめとして、このコードに対する指摘・アドバイス
|
10
11
|
|
11
|
-
`main`関数が意図通りに実装されていません。質問中にあるコードでは「`function::measure`クラスに値`function::able`を指定して一時オブジェクトを構築し、同一行内でそのオブジェクトを破棄」してしまいます。つまり
|
12
|
+
`main`関数が意図通りに実装されていません。質問中にあるコードでは「`function::measure`クラスに値`function::able`を指定して一時オブジェクトを構築し、同一行内でそのオブジェクトを破棄」してしまいます。つまりコード区間の時間計測としては全く機能せず、常に`0 ms`と出力されるはずです。
|
12
13
|
|
13
14
|
```cpp
|
14
15
|
int main() {
|
@@ -21,9 +22,9 @@
|
|
21
22
|
|
22
23
|
```cpp
|
23
24
|
int main() {
|
24
|
-
function::measure span(function::able);
|
25
|
+
function::measure span(function::able); // オブジェクト作成=計測開始
|
25
26
|
// (計測対象の処理)
|
26
|
-
} // ここで
|
27
|
+
} // ここでオブジェクトが破棄される=計測終了
|
27
28
|
```
|
28
29
|
|
29
30
|
また、全般的に名前付けルールが少々気になりました。
|