不寻常的static_cast语法

时间:2015-05-29 14:05:57

标签: c++ casting

我设法将错误跟踪到以下表达式:

foo(static_cast<T>(a, b)); // Executes specialisation 1

结束括号错误的地方。正确的陈述应该是:

foo(static_cast<T>(a), b); // Executes specialisation 2

我从未见过与形式(a,b)一起使用的static_cast,或者在任何地方看过它。这是什么意思?前一个陈述返回b。

3 个答案:

答案 0 :(得分:15)

private void OpenparseJson(String stringJson) { try { JSONArray jArray = new JSONArray(stringJson); JSONObject jObject = null; for (int i = 0; i < jArray.length(); i++) { jObject = jArray.getJSONObject(i); String s1 = jObject.getString("dateticket"); String s2 = jObject.getString("description"); String s3 = jObject.getString("etat"); String s4 = jObject.getString("idticket"); String s5 = jObject.getString("nomfichier"); String s6 = jObject.getString("objet"); String s7 = jObject.getString("priorite"); } } catch (JSONException e) { e.printStackTrace(); } } 不是函数,它是关键字,因此static_cast中的逗号不是参数分隔符;它是comma operator。它评估a, b但会丢弃结果。表达式的计算结果为a

答案 1 :(得分:8)

这与static_cast无关,但“使用”了comma operator。其结果是右侧,所以

foo(static_cast<T>(a, b));

相当于

foo(static_cast<T>(b));

除非a具有其他效果(然后执行并将其结果丢弃)。使用正确的编译器设置,您将收到有关此类事情的警告:Live

答案 2 :(得分:0)

,是逗号运算符,因此a, b只是b