三元运算符编译
Ternary operator compilation
为什么这会在粗体行给出编译问题?
#include<iostream>
static int i = 10;
int main() {
**(i) ? (std::cout << "First i = " << i << std::endl) : ( i = 10);**
std::cout << "Second i = " << i << std::endl;
}
编译消息:
test.c:8: error: invalid conversion from ‘void*’ to ‘int’
你对三元运算符的用法有点奇怪:根据 i
的值,你要么打印一些东西来std::cout
,要么给它分配一个新值。这些操作不会通过表达式的返回值共享连接,因此不要这样做。使用三元运算符时,最好更接近其预期目的:两个可能表达式的简短表示法,带有基于简单谓词的调度。例:
const int n = i == 0 ? 42 : 43;
您的代码应如下所示:
if (i == 0)
i = 10;
else
std::cout << "First i = " << i << "n";
原始代码段未编译的原因是三元运算符没有通用的返回类型。"Common"表示两个表达式都可以转换为返回类型。例如,在const int n = i == 0 ? 42 : 43;
中,返回类型为 int
。
问题来自以下事实:条件运算符(三元运算符)中表达式的返回值(在std::cout ...
的情况下std::ofstream
,i = 10
情况下int
)不兼容,因此条件运算符格式不正确。请检查条件运算符的返回类型的规则。
在这种情况下,只需使用普通条件:
if (i)
std::cout << "First i = " << i << std::endl;
else
i = 10;
相关文章:
- C++中的条件运算符 ( ? : ) 可以编译时吗?
- 编译"运算符删除"时C++编译器如何工作?
- 为什么 std::make_shared 无法编译带有已删除运算符 new 的类型?
- 使用 MINGW gcc 编译时,不会为 std::string 调用重载的新运算符
- 编译我的 3 个文件时,我收到错误,说"运算符="不匹配
- 使用堆栈编译错误的 C++ 反向行没有运算符匹配操作数
- 代码块编译错误与运算符<<不匹配
- ostream 运算符的编译时重载
- 编译Qt项目给出了对运算符delete(void*,unsigned int)的未定义引用
- <<运算符覆盖使用 g++ 而不是窗口编译
- 为什么有条件编译运算符模板会更改另一个运算符的可用性?
- 在 sizeof 运算符上强制编译时错误
- 如何在C++编译时检查运算符的特定重载是否存在
- 为模板类编写二进制加法运算符. 编译错误
- 重载运算符编译错误?
- 三元运算符编译
- C++模板运算符编译错误
- C++中重载运算符编译但崩溃
- C++ GMP 库 ostream 运算符<<编译但不链接?
- 重载运算符+编译错误没有匹配函数调用...