【发布时间】:2021-04-01 16:12:35
【问题描述】:
我想更好地理解使用 default 构造函数创建 boost::optional 对象之间的区别:
boost::optional<PastaType> pasta = boost::optional<PastaType>(spaghetti)
或使用 make_optional 版本:
boost::optional<PastaType> pasta = boost::make_optional<PastaType>(spaghetti)
环顾四周,我才明白在 make_optional 版本中,PastaType 不能是引用类型,但我想更好地了解何时使用其中一种。
谢谢!
【问题讨论】:
-
感谢您的回答!我不知道你可以使用 make_optional 而不指定类型。我想到了另外两个相关的问题。使用 make_optional 指定模板参数有什么意义?为什么 spaghetti 必须是 const 类型?
-
如果您指定模板参数,使用
make_optional没有多大意义。我认为您对const有误。它根据表达式的值类别复制或移动它的参数 -
“我想到了另外两个相关的问题。” cmets 部分不是提出新问题的好地方。考虑将其中一个答案标记为正确(似乎您接受它们)并提出问题in the usual way
-
1) 我想不出任何理由,除非否则扣除会失败。如果您使用 C++17 或更高版本,您可能可以跳过
make_optional。 2) “必须是const”是什么意思? -
谢谢大家!很抱歉对评论会话的使用不当;我认为将所有内容放在一起会对未来的读者有所帮助。无论如何,我对 const 的假设是错误的;我在this新问题中更好地解释了我的疑问
标签: c++ boost boost-optional