boost::optional 对比 boost::make_optional
boost::optional vs boost::make_optional
我想更好地理解使用 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
是一个方便或辅助函数,可以通过推断 optional
的模板参数来减少您必须编写的代码量。这两种方法在功能上是等价的。
auto pasta = boost::make_optional(spaghetti);
在 C++17 之前,您无法从 class 的初始化中推断出模板参数,就像您可以使用函数模板调用一样。
作为解决方法,以 make_thing
形式命名的函数构造了 thing
允许推导。
auto pasta = boost::make_optional(spaghetti); // pasta is boost::optional<PastaType>
auto pasta = boost::optional(spaghetti); // compile error before C++17, afterward pasta is boost::optional<PastaType>
我想更好地理解使用 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
是一个方便或辅助函数,可以通过推断 optional
的模板参数来减少您必须编写的代码量。这两种方法在功能上是等价的。
auto pasta = boost::make_optional(spaghetti);
在 C++17 之前,您无法从 class 的初始化中推断出模板参数,就像您可以使用函数模板调用一样。
作为解决方法,以 make_thing
形式命名的函数构造了 thing
允许推导。
auto pasta = boost::make_optional(spaghetti); // pasta is boost::optional<PastaType>
auto pasta = boost::optional(spaghetti); // compile error before C++17, afterward pasta is boost::optional<PastaType>