【发布时间】:2020-09-09 17:51:58
【问题描述】:
所以我一直在环顾四周并尝试不同的事情,但我无法理解如何使用 constexpr 创建一些字符串集合。
我要做的基本上是以下内容,显然无法编译:
constexpr std::vector<std::string> fizzbuzz(){
size_t N = 100;
std::vector<std::string> result;
result.reserve(N);
for (int i = 0; i < N; i++){
int k = i+1;
if(k % 5 == 0 && k % 3 == 0){
result.push_back("FizzBuzz");
}
else if(k % 5 == 0){
result.push_back("Buzz");
}
else if(k % 3 == 0){
result.push_back("Fizz");
}
else{
result.push_back(std::to_string(k));
}
}
return result;
}
如果我知道如何做一些简单的事情,我已经很高兴了:
constexpr std::string fizzbuzz(int k){
if(k % 3 == 0) return "Fizz";
else return std::to_string(k);
}
我认为这只是完成解决方案的一小步。 它不必是 std::strings 也不必是 std::vectors。
哦,C++ 标准越低越好。
已编辑以帮助更好地理解问题。
【问题讨论】:
-
你可以在 c++20 中做到这一点。
-
std::vector/std::string没有 constexpr 构造函数(在 C++20 之前)...std::array和std::string_view有。 -
@cigien:据我所知,即使在 C++20 中,OP 也无法打印(运行时)一个 constexpr 容器(应该保留在 constexpr 评估中)。
-
@Jarod42 是的,没错。
-
哦,不知怎的,我错过了问题的重点,我的错