考虑以下陈述:
int? v1 = null;
int? v2 = 5 * v1;
v2
的值是多少?(null
或空字符串?)如何防止编译器将其标记为无效操作?我需要遵循自定义异常处理吗?
最佳答案
它是null
。
C语言规范3.0(第7.2.7节:起重操作员)
对于二进制运算符:
如果操作数和结果类型都是非空值类型,则存在操作符的解除形式。提升形式是通过向每个操作数和结果类型添加一个+
修饰符来构造的。如果一个或两个操作数都是-
,提升运算符将生成*
值(例外情况是/
类型的%
和&
运算符,如第7.10.3节所述)。否则,提升运算符将展开操作数,应用基础运算符,并包装结果。
如何防止编译器将其标记为无效操作?我需要遵循自定义异常处理吗?
这不是一个无效的操作。它不会抛出异常,因此在这种情况下不需要处理异常。