执行身份提升有什么开销:: lexical_cast?

Dre*_*ann 5 c++ boost lexical-cast

给定如下函数:

template< typename T >
void function1( const T &t )
{
  function2( boost::lexical_cast<std::string>(t) );
}
Run Code Online (Sandbox Code Playgroud)

如果传递给的类型function1已经是一个什么样的开销std::string

开销是否会有所不同,具体取决于我要使用的类型lexical_cast

使重载函数绕过转换是多余的吗?例如:

void function1( const std::string &t )
{
  function2( t );
}

template< typename T >
void function1( const T &t )
{
  function1( boost::lexical_cast<std::string>(t) );
}
Run Code Online (Sandbox Code Playgroud)

boost的版本可能与你的答案有关,因为据我所知,lexical_cast在修订版中已经获得了一些优化.

Xeo*_*Xeo 5

由于文档没有提供关于这个主题的任何内容,我挖掘了lexical_cast源代码(1.51.0),发现它对类型进行了一些编译时检查,并决定了进行转换的特定"caster类".如果源和目标相同,则此"脚轮类"将仅返回输入.

从source(boost/lexical_cast.hpp:2268)伪编码和简化:

template <typename Target, typename Source>
Target lexical_cast(const Source &arg)
{
    static if( is_character_type_to_character_type<Target, src> ||
               is_char_array_to_stdstring<Target, src> ||
               is_same_and_stdstring<Target, src> )
    //         ^-- optimization for std::string to std::string and similar stuff
    {
      return arg;
    }
    else
    {
      /* some complicated stuff */
    }
}
Run Code Online (Sandbox Code Playgroud)

我无法直接看到任何优化的其他身份蒙上,不过,翻翻通常选择lexical_cast_do_cast"施法类"是使我的头不疼.:(