我设法将错误跟踪到以下表达式:
foo(static_cast<T>(a, b)); // Executes specialisation 1
结束括号错误的地方。正确的陈述应该是:
foo(static_cast<T>(a), b); // Executes specialisation 2
我从未见过与形式(a,b)一起使用的static_cast,或者在任何地方看过它。这是什么意思?前一个陈述返回b。
答案 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