值类型后面加问号

看下面代码:

public int? _num;

我们都知道引用类型可以空,比如:

string str = null;
但如果你讲值类型赋为空

int Number = null;
此时编译器会报错,此时如果你在类型加上?
int? Number = null;
此时错误消失,表示Number可以赋为空。

所以值类型后面加问号表示可为空Null(Nullable结构)

Nullable是.NET 2.0中新提供的一种用于标明一个值类型是否可以为空的技术。 

可以使用GetValueOrDefault获取值,如果为空返回值类型默认值

int? Number =null;
int t= Number.GetValueOrDefault();
通过HasValue判断是否有值

bool have = Number.HasValue;





### C++ 中三目运算符 (?:) 使用时可能出现的错误及解决方案 在 C++ 编程中,三目运算符 `?:` 是一种条件表达式,用于根据布尔条件返回两种可能的结果之一。然而,在实际编程过程中可能会遇到一些常见错误。 #### 错误一:不同类型的操作数 当三目运算符的两个分支返回不同类型的值时,编译器无法自动推导出统一的返回类型[^2]: ```cpp int result = condition ? "string" : 42; // Error: cannot convert from 'const char [7]' to 'int' ``` 为了修复此问题,应确保两者的类型相同或可隐式转换为同一类型: ```cpp std::string result = condition ? std::to_string(42) : "default"; ``` #### 错误二:常量引用绑定到临时对象 如果尝试将非常量左值引用绑定到由三目运算符产生的右值,则会引发编译错误: ```cpp T& ref = condition ? obj1 : obj2; // Error when T is not a reference type or pointer ``` 正确的做法是使用通用引用或将结果存储在一个局部变量中再赋给引用: ```cpp auto&& ref = condition ? obj1 : obj2; ``` #### 错误三:复杂表达式的优先级问题 由于三目运算符具有较低的优先级,因此与其他算术或逻辑运算混合使用时容易引起意外行为。建议总是用括号明确指定计算顺序[^3]: ```cpp result = someValue * (condition ? valueIfTrue : valueIfFalse); ``` #### 实际案例修正示范 考虑如下代码片段中的潜在问题及其改进方式: 原始版本存在风险: ```cpp int getValue(bool flag){ return flag ? funcReturningInt() : anotherFuncReturningDouble(); } ``` 优化后的安全写法: ```cpp double getValue(bool flag){ double val_if_true = static_cast<double>(funcReturningInt()); double val_if_false = anotherFuncReturningDouble(); return flag ? val_if_true : val_if_false; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值