C++ 解释在c/c+中赋值时逗号的不寻常用法+;
我在看cuda 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; 假设我是
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语言的基本语法。