可能重复:
C++逗号运算符
大约一年前,我在我正在编写的编码项目中注意到一些模糊的语法:
table_value = table_index += 2, valueFromTable(table_index);
Run Code Online (Sandbox Code Playgroud)
有没有人认识到这一点?它就像一个带有附加声明的作业.这是在我们的整个跨平台编译器套件中编译的,所以我很确定它有效的C++,但我从未见过类似的东西.
任何见解将不胜感激.
Gearoid
编辑:继承人一些工作代码:
#include <iostream>
using namespace std ;
int valueFromTable(int a) { return a ; }
int main()
{
int table_index = 0 ;
int table_value = table_index += 2, valueFromTable(12);
cout<<table_value<<endl;
return 0 ;
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
当所有逗号运算符都不作为逗号运算符时?
什么时候逗号(,)表现为运算符?它什么时候表现为分隔符?它的后果是什么.如果可能,请为两者提供小例子.
我正在运行代码段.但我无法理解它产生的代码和输出.
#include <stdio.h>
int main()
{
int a, b,c, d;
a=3;
b=5;
c=a,b;
d=(a,b);
printf("c = %d" ,c);
printf("\nd = %d" ,d);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该程序的输出是:
c=3
d=5
Run Code Online (Sandbox Code Playgroud)
我不知道输出是怎么来的?
我的女士给了我一个问题要解决。预测以下代码的输出。
#include <stdio.h>
int main()
{
int i = 0, j = 0;
printf("Output is : ");
while (i < 5, j < 10) // Doubt: how does while accept 2 arguments?? and how it works??
{
i++;
j++;
}
printf("%d, %d\n", i, j);
}
Run Code Online (Sandbox Code Playgroud)
我以为是语法错误。但是当我尝试运行时,它给了我输出。
Output is : 10, 10
Run Code Online (Sandbox Code Playgroud)
但是如何?谁能解释一下?
但是如果我删除第一个 printf 语句printf("Output is : ");并运行它,我的防病毒软件会给我一个Trojan检测到a 的警报。但是它怎么变成了Trojan?
int a,b;
a = 1 ? 1,2 : 3,4; // a = 2
b = 0 ? 1,2 : 3,4; // b = 3
Run Code Online (Sandbox Code Playgroud)
逗号运算符总是返回逗号的右侧,但是如果我们对变量赋值,则返回左侧,除非我们使用().那么第一个表达式如何赋予2.
我认为它是a = 1,2所以它应该是1但实际上a = 2.
为什么?
我已经阅读了这个问题,我想补充说,使用逗号运算符无法完成的事情是什么.这让我很困惑,因为我能做到这一点:
int arr[3];
arr[0]=1,arr[1]=2,arr[2]=3;
Run Code Online (Sandbox Code Playgroud)
但当我这样做时:
int arr[3],arr[0]=1,arr[1]=2,arr[2]=3;
Run Code Online (Sandbox Code Playgroud)
它给了我一个编译器错误.
我想问一下逗号运算符在实际操作中的局限性是什么?
我遇到了一个代码片段,其中使用了一个语句int k=(a++,++a).我不明白这是什么类型的陈述(a++,++a)以及如何评估它.为什么在这里使用支架?这是函数调用吗?
这是代码.
#include <stdio.h>
int main(void) {
int a=5;
int k=(a++,++a);
printf("%d\n",k);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到的输出是7 - 为什么?
据我了解,该术语j = i将++i在语句之前执行
j = i, ++i;.
C++ 标准是否保证j = i将++i在循环之前执行
for (auto i = std::next(begin), j = begin; i!= end; j= i, ++i)?
我需要帮助在一组中存储(x,y)坐标组.我存储的方式是
set<int> s;
s.insert( (1, 1) );
s.insert( (1, 3) );
s.insert( (3, 1) );
s.insert( (3, 3) );
for (auto x: s) {
cout << x << endl;
}
Run Code Online (Sandbox Code Playgroud)
但它不会打印出(1,1),(1,3)....而是打印出1,3.
我对c ++很新,所以如果有人能给我建议如何用一组存储这些值,我将不胜感激!
一个快速的问题,这在c ++中起什么作用;
auto asd = (1,2,3,4,5);
Run Code Online (Sandbox Code Playgroud)
注意:这确实会发出错误
这是一堂课吗?如果它是数据结构,类或数组,可以告诉我如何获取单个元素值;
当我cout << asd; 它总是返回最后一个数字,在这种情况下为5
提前致谢