我遇到了這個問題,我似乎無法在編譯時檢查 anstd::array中的所有元素是否相等。這看起來很簡單,而且我對 C 并不陌生,但我想不通!(我只會使用<algorithm>但遺憾的是那些在 C 17 中沒有被標記為 constexpr,而且我堅持使用 C 17,因為 CUDA。)
這是一個示例(無法編譯)。
#include <array>
int main()
{
constexpr std::array<int, 3> a {0, 0, 0};
constexpr bool equal = [=](){
for (int i = 1; i < 3; i )
{
if constexpr (a[0] != a[i])
return false;
}
return true;
}();
}
為什么不a[0] != a[i]符合 constexpr 的條件?(這是 GCC 和 Clang 給我的錯誤。)我如何得到我需要的結果?
uj5u.com熱心網友回復:
由于您i的不是編譯時常量,因此您不能使用if constexpr. 一個簡單的if就足夠了,它仍然可以在編譯時檢查您的陣列。
#include <array>
int main()
{
constexpr std::array<int, 3> a {0, 0, 0};
constexpr bool equal = [=](){
for (int i = 1; i < 3; i )
{
if (a[0] != a[i])
//^^
return false;
}
return true;
}();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/353729.html
上一篇:防止共享哈希表中的資料競爭
下一篇:0xe foo是如何決議的?
