Boost logo

Boost :

Subject: Re: [boost] Boost.Convert. Take 2.
From: Rob Stewart (robertstewart_at_[hidden])
Date: 2014-02-21 14:29:20

On February 21, 2014 12:21:12 PM EST, alex <alexhighviz_at_[hidden]> wrote:
>>-----Original Message-----
>>From: Boost [mailto:boost-bounces_at_[hidden]] On Behalf Of Rob
>>Sent: 21 February 2014 15:35
>>To: boost_at_[hidden]
>>Subject: Re: [boost] Boost.Convert. Take 2.
>>On February 21, 2014 5:48:32 AM EST, alex <alexhighviz_at_[hidden]>
>>>>>All loops are actually like
>>>>>for (int k = 0; k < local::num_cycles; ++k)
>>>>> int k = boost::convert<int>::from("12345", ccnv).value();
>>>>> BOOST_ASSERT(k == 12345);
>>>>>Do you think there still might be something I missed?
>>>>The assertion won't help in an optimized build, of course. Save the
>>>values and
>>>>print them at the end, after you've captured the elapsed times.
>>>Isn't it also a problem that the inside of the loop doesn't vary? A
>>>compiler may decide to evaluate boost::convert<int>::from("12345",
>>>ccnv).value() only once and re-use the result?
>>Of course, yes. I should have noticed that. Incrementing a value each
>>and printing that value at the end should work. Overflow isn't
>>using the final value in an opaque way will prevent optimizing away
>>conversions in the loops.
>That seems easier said than done, because it is the value of a string
>needs to be unpredictable?
>int sum = 0;
>for (int k = 0; k < local::num_cycles; ++k)
> char str[] = "12345";
> str[4 - k % 5] = 49 + k % 9; //because the char '1' has value 49
> sum += boost::convert<int>::from(str, ccnv).value();
>std::cout << sum;

I'm not sure that's necessary. Unless there is a lot more inlining than I'm imagining, I don't think the optimizer will cause a problem with the string literal input.


(Sent from my portable computation engine)

Boost list run by bdawes at, gregod at, cpdaniel at, john at