为何允许const引用绑定不同类型?C++技术疑问
关于const引用绑定隐式转换对象的疑问与踩坑
我最近发现C++里可以将某类型的值赋值给不同类型的const引用,比如:
const std::optional<float>& ref0 = 5.0f; const std::optional<float>& ref1 = get_float(); // 假设get_float返回float类型
原本我以为引用只能绑定同类型对象,非引用类型的这种隐式转换赋值我能理解,但这个特性还是让我十分意外。我已经查过C++标准中的相关章节,但仍想弄明白:这种特性在什么场景下是必要的?
我近期就因该特性踩过坑:
auto get_value() -> std::optional<float>{ /* ... */ } const std::optional<float>& value = get_value(); // 检查value是否有值并进行后续使用...
之后我把get_value()的返回值改为原生float,本以为所有和引用相关的代码都会报错,结果实际并未报错。如果没留意到这一点,那些原本用来检查optional是否有值的无用代码就会保留下来,留下潜在问题。
内容的提问来源于stack exchange,提问作者Basti
相关产品推荐
相关产品推荐

