C++20-Kompilierungszeit ruft die Größe eines Vektors abC++

Programme in C++. Entwicklerforum
Guest
 C++20-Kompilierungszeit ruft die Größe eines Vektors ab

Post by Guest »

Ich habe eine Frage bezüglich der Kompilierungszeit zum Abrufen der Größe eines Vektors in C++20. Basierend auf C++20 ist es möglich, in der Kompilierungszeit einen Vektor oder einen String im Umfang einer Funktion zu erstellen.
Es gibt den folgenden Teil des Codes

Code: Select all

#include 
#include 
#include 

consteval auto copyVecToArray(){
std::vector vec{1,2,3,4,5,6,7};
std::array arr;
std::copy(std::begin(vec),std::end(vec),std::begin(arr));
return arr;
}
int main() {
constexpr auto value = copyVecToArray();
for(auto el : value){
std::cout  'vec.std::vector::size()'
> /opt/compiler-explorer/gcc-14.2.0/include/c++/14.2.0/bits/stl_vector.h:993:32:
> error: the value of 'vec' is not usable in a constant expression   993
> |       { return size_type(this->_M_impl._M_finish -
> this->_M_impl._M_start); }
>       |                          ~~~~~~^~~~~~~ :6:22: note: 'vec' was not declared 'constexpr'
>     6 |     std::vector vec{1,2,3,4,5,6,7};
>       |                      ^~~ :7:28: note: in template argument for type 'long unsigned int'
>     7 |     std::array arr;
>       |                    ~~~~~~~~^~ :8:55: error: no matching function for call to 'begin(int&)'
>     8 |     std::copy(std::begin(vec),std::end(vec),std::begin(arr));
>       |
Aber wenn ich den obigen Code ein wenig ändere und die Größe des Vektors von einer Consteval-Funktion zurückgebe, wird dies erfolgreich kompiliert.

Code: Select all

#include 
#include 
#include 
consteval auto getVec(){
std::vector vec{1,2,3,4,5,6,7};
return vec;
}
consteval auto getSize(){
return getVec().size();
}
consteval auto copyVecToArray(){
std::array arr;
auto vec = getVec();
std::copy(std::begin(vec),std::end(vec),std::begin(arr));
return arr;
}
int main() {
constexpr auto value = copyVecToArray();
for(auto el : value){
std::cout

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post