簡體   English   中英

為什么不是std :: iota constexpr?

[英]Why isn't std::iota constexpr?

以下程序打印出一張洗牌的牌組(整數):

#include <array>
#include <algorithm>
#include <random>
#include <iostream>

typedef unsigned int card;
typedef std::array<card, 52> deck;
auto shuffled_deck(){
    deck d = {};
    std::iota(d.begin(), d.end(), 0);
    std::shuffle(d.begin(), d.end(), std::default_random_engine());
    return d;
}

int main(){
    for(auto& i: shuffled_deck()) std::cout << i << ", ";
}

g++ -std=c++17編譯,程序運行並打印:

18, 34, 27, 46, 11, 3, 12, 19, 33, 21, 41, 13, 36, 49, 40, 22, 8, 9, 28, 2, 6, 30, 50, 24, 37, 32, 35, 4, 15, 45, 47, 43, 14, 44, 20, 23, 29, 7, 31, 51, 26, 10, 42, 48, 0, 38, 5, 16, 17, 1, 25, 39,

這很棒,但是直覺告訴我這個套牌可以在編譯時創建,所以我制作了shuffled_deck方法constexpr

constexpr auto shuffled_deck(){
    deck d = {};
    std::iota(d.begin(), d.end(), 0); // Error! Iota isn't constexpr!
    std::shuffle(d.begin(), d.end(), std::default_random_engine());
    return d;
}

使用g++ -std=c++17編譯會給出編譯錯誤,說明std::iota不是constexpr 我的問題是為什么? 當然std::iota在編譯時是可以確定的。 標准庫是否僅落后於此功能?

應該建議將其添加到標准中。 現在看來,事實並非如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM