Visual C ++的<random>中的标准不符合项

时间:2019-02-08 04:46:48

标签: c++ visual-studio random std

N3337文档(除其他外)定义了用于生成随机数的函数,例如std::mt19937std::uniform_int_distribution

这是在Visual Studio中可编译的代码示例:

#include <random>
#include <iostream>

int main() {
    std::mt19937 generator(200);
    const std::discrete_distribution<int> distribution({41, 9, 40, 10});

    for(int i = 0; i < 16; i++) {
        char a = 'A' + distribution(generator);
        std::cout << a;
    }

    std::cout << "\n";
    return 0;
}

问题是const之前的std::discrete_distribution说明符。 N3337文档指出,可能所有分布函数中的operator()均未标记const。这意味着不可能在operator()对象上调用const。但是Visual Studio并没有任何问题,因为大多数分发函数中的operator()方法的标头中确实包含const说明符(似乎唯一的例外是std::normal_distribution-他们那里没有const!)。

std::discrete_distribution的MSDN文档中没有const的说明符对我们没有帮助,而实际上标头确实有constMSDN

这里是否有Visual Studio不符合标准的原因?

这是一个问题,因为它使用Visual Studio编写的代码无法在其他编译器(如GCC)中进行编译,GCC已将operator()正确标记为non-const,并且不允许上述程序被

0 个答案:

没有答案