gpt4 book ai didi

c++ - 如何将 constexpr 字符串文字传递给其他函数

转载 作者:行者123 更新时间:2023-12-03 07:00:29 25 4
gpt4 key购买 nike

使用以下两个函数往往会在编译时获取字符串文字的长度。第一个不会编译,虽然例子没有意义,但是我实际上需要使用 getlen 中的字符串长度作为编译时常量,我该怎么做?

// compile failed with "expression did not evaluate to a constant" in vs2019 std=latest
// failure was caused by a read of a variable outside its lifetime
// see usage of 's'
constexpr auto getlen(const char* s) {
constexpr auto size = std::char_traits<char>::length(s);
return size;
}

constexpr auto getlen2(const char* s){
return std::char_traits<char>::length(s);
}

int main() {
constexpr size = getlen2("suprise!") // size is 8
return 0;
}
第二个函数显示 getlen2 的返回确实是 constexpr,所以必须是 s .这怎么解释?

最佳答案

那是因为 constexpr函数也可以在运行时调用,但执行getlen只有在编译时调用才有意义:

constexpr auto getlen(const char* s) {
constexpr auto size = std::char_traits<char>::length(s);
return size;
}
在以下上下文中,很明显 size不能是 constexpr :
int main(int argc, char** argv)
{
(void) getlen(argv[0]);
}
如果你需要你的函数只能在编译时调用,你可能会对 consteval 感兴趣。 .

关于c++ - 如何将 constexpr 字符串文字传递给其他函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64459797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com