C++20-Kompilierungszeit ruft die Größe eines Vektors ab
Posted: 05 Jan 2025, 05:19
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
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.
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));
> |
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