samedi 10 juillet 2021

There is no `std::queue::push(value_type &&)` for MSVC(C++17 enabled)

As per the cppreference, there is void push(value_type&& value );. But when I optimized my code on visual studio 2017 with C++17 option, I found g_queue.push(std::move(element)) actually calls std::queue::push(const value_type&) other than std::queue::push(const value_type&&) .

For me, the value_type(i.e T) for the queue is std::vector<char>.

What a surprise that there is no std::queue::push(const value_type &&) for MSVC!

And as per the MSDN, it seems there is no std::queue::push(value_type&&) indeed.

UPDATE:

I looked the header for std::queue which is implemented by MS. There is no void push( value_type&& value ) indeed.Header path is c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\queue line 130!

And the Perfomance Profiler could not cheat me too, it really calls std::queue::push(const value_type&) .

A demo snippet is on the way at once.Please give me two minutes.

Here is the demo code

#include<vector>
#include<queue>
#include<string>

int main()
{
    std::queue<std::vector<char>> queue;
    
    std::string str = "I need some help, thanks.";
    std::vector<char> vec(str.begin(), str.end());
    
   //The `Perfomance Profiler` provied by VC2017 could not cheat me too. 
   //It really calls std::queue::push(const value_type&).
    queue.push(std::move(vec)); 
}

Aucun commentaire:

Enregistrer un commentaire