为什么标准发行版的结果不是强制要求在各实现之间保持一致?伪随机数生成器的结果是对经授权的是相同的另一方面.
例如,以下几乎肯定会为每个不同的标准库实现打印不同的东西.
std::mt19937 random {100};
std::normal_distribution<> dist;
std::cout << dist(random);
Run Code Online (Sandbox Code Playgroud)
假设我想进行程序生成,并希望相同的起始种子在平台和编译器之间产生相同的结果.我无法用stl做到这一点.我必须"回归"使用提升.为什么这不是缺陷?
在我使用了一些模板代码中的一些错误后,std::vector::value_type我把它跟踪到以下内容.这是根据标准的正确行为,还是这是MSVC 2012 CTP的问题?
typedef std::vector<int>::value_type t1;
typedef std::vector<int const>::value_type t2;
static_assert(!std::is_same<t1, t2>::value, "hmmm");
Run Code Online (Sandbox Code Playgroud)
上述断言失败了.
简单的问题,但令人惊讶的难以搜索.对于声明A && B我知道有评价之间的序列点A和B,我知道评价的顺序是从左向右,但什么是允许这样做时,它可以证明一个编译器B始终是假的(甚至可能是明确地这样)?
也就是说,function_with_side_effects() && false是否允许编译器优化掉函数调用?