Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 解释在c/c+中赋值时逗号的不寻常用法+;_C++_C_Operators - Fatal编程技术网

C++ 解释在c/c+中赋值时逗号的不寻常用法+;

C++ 解释在c/c+中赋值时逗号的不寻常用法+;,c++,c,operators,C++,C,Operators,我在看cuda c编程指南中的一段代码 他们给我的一个片段中有一句话让我陷入了一个循环,我在解释它时遇到了一些困难 unsigned long long int old = *address_as_ull, assumed; 我已经在SE上经历了几个类似的问题,我想我已经明白了,但我仍然不确定。。。我对指示行的解释是,它相当于: unsigned long long int old = *address_as_ull; unsigned long long int assumed; 假设我是

我在看cuda c编程指南中的一段代码

他们给我的一个片段中有一句话让我陷入了一个循环,我在解释它时遇到了一些困难

unsigned long long int old = *address_as_ull, assumed;
我已经在SE上经历了几个类似的问题,我想我已经明白了,但我仍然不确定。。。我对指示行的解释是,它相当于:

unsigned long long int old = *address_as_ull;
unsigned long long int assumed;
假设我是对的,我真的不明白为什么,或者发生了什么。我知道我可以做像这样的事情

int a,b,c;

声明3种类型的整数,但是当我在一行中混合赋值和声明时会发生什么情况?

您是正确的:

unsigned long long int old = *address_as_ull, assumed;
与此相同:

unsigned long long int old = *address_as_ull;
unsigned long long int assumed;
声明一个或多个变量时,可以选择指定初始值设定项

根据本手册第6.7节:

6声明说明符由一系列 指示链接、存储持续时间和部件的说明符 声明器表示的实体类型最新版本 init声明器列表是一个逗号分隔的 声明器,每个声明器可能有其他类型 信息,或初始值设定项,或两者都有。声明符 包含要声明的标识符(如果有)


也许有人会给出一个技术上更准确的答案,但这里有一个轶事可能会有所帮助

inta被解释为“为名为“a”的整数分配足够的字节”

inta、b、c被解释为“为称为“a”、“b”和“c”的3个整数分配足够的字节”

您可以将equals运算符视为一个函数调用,它返回它所处理的相同引用。所以
old=*address\u as\u ull*
的“return”值是
old

作为旁注,只要“最终结果”是整数,您也可以混合和匹配指针

int fact(int n);
int
    a = 1, // an integer
    *p = new int(2), // a pointer initialized with the value 2
    (*fp)(int) = fact; // a function pointer to the function fact()

除了这类轶事之外,我所能说的就是“这是一种方式,因为有人决定了这是一种方式,这是标准”。这样可以方便地声明许多相同类型的变量。也许它有助于编译器进行优化(真的不好说)。但毫无疑问,没有理由不这样做。

2016。人们仍然认为C和C++是同一种语言。我认为这个问题适用于两种语言。@tobi303一点也不适用。这是一个变量声明,不是逗号运算符。tobi,我看了那个,它没有回答我的问题。评估没有做任何事情,或者它是在声明变量吗?答案是肯定的……试着在我为个别问题指定的SOC上避免“是/否”问题?以任何顺序?例如:inta,b=3,c,d=5?你可以一直初始化或不初始化,直到奶牛回家。到那时,你将有足够的计数器来跟踪很多奶牛。是的,这是C语言的基本语法。