首页 > 解决方案 > 为什么TensorFlow推荐“构造操作的函数式”?

问题描述

TensorFlow 的文档中,可以找到以下文本:

// Not recommended
MatMul m(scope, a, b);

// Recommended
auto m = MatMul(scope, a, b);

我认为使用“推荐”样式没有明显的好处。第一个版本至少更短。此外,“推荐”版本可能包含更多与不必要的分配操作相关的操作。

我已阅读该文档页面不少于六次,但仍然无法理解其推理背后的基本原理。

这个建议只是风格问题还是第二个版本有一些好处?

标签: c++tensorflowconstructor

解决方案


此外,“推荐”版本可能包含更多与不必要的分配操作相关的操作。

没有任务。是初始化。原则上可能存在的任何额外对象在任何值得使用的编译器中都被完全省略。

您引用的建议与Herb Sutter 的“几乎总是自动”的建议是一致的。支持这种风格的最强点(完全公开,我不遵循)是它不可能让变量保持未初始化状态。

auto foo; // ill-formed.
int foo; // indeterminate value
auto foo = int(); // a zero integer

当然,一个好的静态分析工具也可以警告它,但它仍然是一个非常强的地方,不需要编译器或外部工具进行额外的分析。

除此之外,风格论点是它还使您的代码与您auto出于理智而使用的情况保持一致,例如

auto it = myVec.begin();

但是YMMV在所有方面。它最终将成为一种风格选择,无论选择哪种风格,两种风格都存在例外。


推荐阅读