#include <iostream>
#include <string>
constexpr std::string appendStringC(std::string s)
{
return s + " Constexpr func";
}
std::string appendString(std::string s)
{
return s + " Regular func";
}
int main()
{
std::string s1 = "String 1";
std::string s2 = "String 2";
std::cout << std::endl
<< appendStringC(s1) << std::endl
<< appendString(s2) << std::endl;
return 0;
}
sto cercando di eseguire la compilazione tempo di funzionamento prefisso della stringa/postfix concatenazione utilizzando constexpr. Tuttavia questo esempio produce errori seguenti:compilazione tempo concatenazione di stringhe utilizzando constexpr
const_string_generation.cpp: In function ‘constexpr std::__cxx11::string appendStringC(std::__cxx11::string)’:
const_string_generation.cpp:4:23: error: invalid type for parameter 1 of constexpr function ‘constexpr std::__cxx11::string appendStringC(std::__cxx11::string)’
constexpr std::string appendStringC(std::string s)
^
In file included from /usr/include/c++/5.3.0/string:52:0,
from /usr/include/c++/5.3.0/bits/locale_classes.h:40,
from /usr/include/c++/5.3.0/bits/ios_base.h:41,
from /usr/include/c++/5.3.0/ios:42,
from /usr/include/c++/5.3.0/ostream:38,
from /usr/include/c++/5.3.0/iostream:39,
from const_string_generation.cpp:1:
/usr/include/c++/5.3.0/bits/basic_string.h:71:11: note: ‘std::__cxx11::basic_string<char>’ is not literal because:
class basic_string
^
/usr/include/c++/5.3.0/bits/basic_string.h:71:11: note: ‘std::__cxx11::basic_string<char>’ has a non-trivial destructor
const_string_generation.cpp:4:23: error: invalid return type ‘std::__cxx11::string {aka std::__cxx11::basic_string<char>}’ of constexpr function ‘constexpr std::__cxx11::string appendStringC(std::__cxx11::string)’
constexpr std::string appendStringC(std::string s)
poiché std :: string non è un valore letterale. Sto cercando un modo semplice per farlo e non mi interessa la compatibilità all'indietro per questo esempio. Ideone: Link
Non è possibile, poiché 'std :: string' generalmente utilizza internamente l'allocazione dinamica (non molto' constexpr'-friendly). Tuttavia, puoi concatenare due o più stringhe * letterali * semplicemente posizionandoli in sequenza. –
@ Cheersandhth.-Alf sì, ma ho un sacco di stringhe lunghe che ho bisogno di concatenare davanti o talvolta dietro di stringhe. Un po 'come i codici di fuga, quindi posizionarli e modificarli manualmente potrebbe diventare presto impacciato. –
È possibile utilizzare la sequenza char, ad esempio http://stackoverflow.com/a/22067775/2684539 – Jarod42