C++条件运算符在全局函数中使用时无法正常工作
C++ Conditional Operators Do Not Work Properly When Used in Global Functions
我正在尝试使用条件运算符来执行比较两个整数之间值的简单 max/min 函数,但我发现当我在函数中全局使用这些条件运算符时,它们无法按预期工作,但是当我在本地放置完全相同的代码时,它们确实工作得很好。
在下面的代码中,我尝试了 4 种方法(如下面的注释所示),方法 2、3 以及 4 种都运行良好,但方法 1(使用与方法 4 中相同的条件运算符,但全局)只是没有产生正确的结果。
//For method 1 to method 4, pick one and comment out the others.
#include <iostream>
//Method 1: Does not work, yields "1,1".
int max(int a, int b){(a) > (b) ? (a) : (b);}
int min(int a, int b){(a) < (b) ? (a) : (b);}
//Method 2: Works well, yields "2,1".
#define max(x, y) ((x) > (y) ? (x) : (y))
#define min(x, y) ((x) < (y) ? (x) : (y))
//Method 3: Works well, yields "2,1".
int max(int a, int b){if(a > b) return a; else return b;}
int min(int a, int b){if(a < b) return a; else return b;}
int main(void)
{
int a = 1, b = 2;
//Method 4: Works well, yields "2,1".
int large = ((a) > (b) ? (a) : (b));
int small = ((a) < (b) ? (a) : (b));
int large = max(a,b); //Comment out when using Method 4.
int small = min(a,b); //Comment out when using Method 4.
std::cout << large << "," << small << std::endl;
return 0;
}
int max(int a, int b){(a) > (b) ? (a) : (b);}
你忘记了那里的"返回"声明。需要指示从函数返回的值。
你的编译器应该警告你这一点。尤其是在学习C++时,打开您能想到的所有编译器诊断非常有用。每个值得一提的编译器都会抱怨这样的代码。
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 为什么STD ::计数将常数传递给Lambda,而不是在弦上工作时而不是字符
- C++程序已停止工作-求解常微分方程