Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用constexpr进行编译时字符串连接 #包括 #包括 constexpr std::string appendStringC(std::string s) { 返回s+“Constexpr func”; } std::string appendString(std::string s) { 返回s+“常规函数”; } int main() { std::string s1=“string 1”; std::string s2=“string 2”; std::cout_C++_String - Fatal编程技术网

C++ 使用constexpr进行编译时字符串连接 #包括 #包括 constexpr std::string appendStringC(std::string s) { 返回s+“Constexpr func”; } std::string appendString(std::string s) { 返回s+“常规函数”; } int main() { std::string s1=“string 1”; std::string s2=“string 2”; std::cout

C++ 使用constexpr进行编译时字符串连接 #包括 #包括 constexpr std::string appendStringC(std::string s) { 返回s+“Constexpr func”; } std::string appendString(std::string s) { 返回s+“常规函数”; } int main() { std::string s1=“string 1”; std::string s2=“string 2”; std::cout,c++,string,C++,String,std:string::operator+()不是一个constepr,实际上它通常是以一种非常动态的方式实现的,依赖于堆内存。您可以像这样附加静态字符串常量: const_string_generation.cpp: In function ‘constexpr std::__cxx11::string appendStringC(std::__cxx11::string)’: const_string_generation.cpp:4:23: error: invalid type for

std:string::operator+()
不是一个
constepr
,实际上它通常是以一种非常动态的方式实现的,依赖于堆内存。您可以像这样附加静态字符串常量:

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)

您不能这样做,因为
std::string
通常在内部使用动态分配(不太
constepr
-友好)。但是,您可以通过将两个或多个字符串文本按顺序排列来连接它们。@Cheersandhth.-Alf是的,但我有很多长字符串需要在字符串的前面或后面连接。有点像转义码,因此手动放置和编辑它们中的每一个可能很快就会变得笨拙。您可以使用char sequence,一些ike@Jarod42太麻烦了,如果没有任何效果,我只会抛出一个hacky宏方法。
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)
"append this string " " to this string"