为什么三元运算符在编译时的工作方式与运行时不同?
Why does the ternary operator work differently at compile time compared to the run time?
template <uint_fast64_t MAX_RAND>
struct RandomLimit
{
static const uint_fast64_t steps =
RAND_MAX >= MAX_RAND ?
1 :
RandomLimit<MAX_RAND / (RAND_MAX + 1)>::steps + 1;
};
上面的代码产生和错误;步骤未定义。在运行时,如果函数调用代替最后一个表达式,则不会调用此函数,也不会发生副作用。当条件成立时,为什么不消除此代码?
请注意,RAND_MAX是 cstdlib 常量,我使用的是 Visual Studio 2015 安装程序。
可能是链接器错误,而不是编译器错误。
也就是说,steps
成员在头文件中正确声明,因此代码可以很好地编译,但是,如果条件始终为 true,则编译器会优化else表达式,并且不会发出对steps
变量的引用。但是,如果条件不是常量,则会编译两个分支,并且会出现未定义的引用错误。
显然,解决方案是将正确的库添加到链接器命令中。
相关文章:
- 以螺旋方式打印矩阵的程序.(工作不好)
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 如何解决在负数的情况下程序以相同方式工作的问题?
- 在 Eclipse 中添加库的工作方式是否与在 Visual Studio 中相同?
- 适用于 macOS 的 Xcode 应用程序。这就是我设置从USB麦克风输入获取音频的方式。一年前工作,现在没有了。为什么
- 我的随机生成器是否不工作,或者我决定人/骨架是否击中对手的方式是否有错误
- OpenGL应用程序在不同的计算机上的工作方式不同
- >= <= 没有按照我使用它们的方式工作,我在哪里搞砸了?
- 程序按执行方式工作,直到我向其添加析构函数为止
- 简单的计数和求和函数没有按照我预期的方式工作
- 任何人都有任何想法编写与C 旧手机中的消息作曲家以相同方式工作的程序
- C++ int x++ 和 int ++x 无法按照我想象的方式工作
- 重载输入/输出运算符,为什么它以这种方式工作而不是以另一种方式工作
- 我正试图在我的SFML Platformer中实现双跳,但它并没有按预期的方式工作
- 比率类中的运算符/=以错误的方式工作
- 怪物阵列没有按我需要的方式工作
- C ++设置没有按照我需要的方式工作
- 为什么这段代码以相反的方式工作?
- 为什么情绪分类不能按照 openCV 链接中指定的方式工作?
- 如果两者都以相同的方式工作,那么使用 void func(struct myStruct s) 和 void func(myStruct s) 有什么区别?