标签: comma-operator

C++重载变量参数的运算符逗号

是否可以通过重载参数的运算符逗号来为函数构造可变参数?我想看一个如何做的例子......,也许是这样的:

template <typename T> class ArgList {
public:
    ArgList(const T& a);
    ArgList<T>& operator,(const T& a,const T& b);
}
//declaration
void myFunction(ArgList<int> list);

//in use:
myFunction(1,2,3,4);

//or maybe:
myFunction(ArgList<int>(1),2,3,4);
Run Code Online (Sandbox Code Playgroud)

c++ arguments operators variadic comma-operator

7
推荐指数
1
解决办法
4608
查看次数

如果有条件,请在C示例中提出一本棘手问题的书

可能重复:
','运算符在C中做什么?

好的我今天接受了采访,他们问我下面代码的输出应该是什么

#include<stdio.h>

int main ()
{

int a=1,b=1;
char c='0';
if(a,b,c)
   printf("wow \n");
}
Run Code Online (Sandbox Code Playgroud)

在我的机器上运行后,我能够得到答案,但我无法回答那里.我想知道是否允许这样的if语句?在哪里提到的?

我的问题是上面提到的if条件我无法理解if语句是如何工作的.

**更新**
我没有在K&R中找到任何这样的东西,任何人都可以推荐一本好书.我已经编程了一些东西而不是C的新东西,但是在这个问题失败之后我想再看一下如果有更深入的C概念了(特别是如上所述)提到我在哪里可以阅读.

c comma-operator

7
推荐指数
1
解决办法
1362
查看次数

Java - 用于循环声明的逗号运算符

我知道我可以像这样使用逗号运算符

for (int i = 1, j = 15; j>10; i++, j--) {
    // do something neat
}
Run Code Online (Sandbox Code Playgroud)

但是有些文章似乎暗示逗号运算符可以在for循环声明之外使用,例如

int j = 2, k = 4 ;
int x ;
// Assignment statement with comma operator
x = j + 1, k ;
Run Code Online (Sandbox Code Playgroud)

来源:http://www.cs.umd.edu/~clin/MoreJava/ControlFlow/comma.html

要么

int x = (expression) ? (i++,2) : 3;
Run Code Online (Sandbox Code Playgroud)

来源:https://stackoverflow.com/a/12047433/1084813

对于代码混淆竞赛来说这将是一个巧妙的技巧或混淆我的同事,但两个示例都不会编译(Java 1.6,Eclipse Juno),错误是"赋值的左侧必须是变量".我试着查看编译器设置,看看是否可以禁止防止错误的代码,但没有运气.

怎么了?逗号运算符是旧规范的一部分,后来又改变了吗?使用不同Java设置编写这些示例的人是否允许这样做?

java for-loop variable-assignment comma-operator assignment-operator

7
推荐指数
2
解决办法
9510
查看次数

为什么我的重载逗号运算符不会被调用?

我试图用这样的非朋友非成员函数重载逗号运算符:

#include <iostream>
using std::cout;
using std::endl;

class comma_op
{
    int val;

public:
    void operator,(const float &rhs)
    {
        cout << this->val << ", " << rhs << endl;
    }
};

void operator,(const float &lhs, const comma_op &rhs)
{
    cout << "Reached!\n";      // this gets printed though
    rhs, lhs;                  // reversing this leads to a infinite recursion ;)
}

int main()
{
    comma_op obj;
    12.5f, obj;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

基本上,我试图让浮点数从两边使用逗号运算符.有一个成员函数只允许我写obj, float_val,而有一个额外的帮助非朋友非成员函数允许我写float_val, obj; 但是不会调用成员操作符函数.

GCC哭泣:

comma.cpp: In function …
Run Code Online (Sandbox Code Playgroud)

c++ gcc operator-overloading comma-operator

6
推荐指数
1
解决办法
973
查看次数

这种动态分配有什么作用?

今天,我发现你可以用C++编写这样的代码并编译它:

int* ptr = new int(5, 6);
Run Code Online (Sandbox Code Playgroud)

这样做的目的是什么?我当然知道动态的new int(5)东西,但在这里我迷失了.有线索吗?

c++ new-operator comma-operator dynamic-memory-allocation

6
推荐指数
1
解决办法
262
查看次数

理解逗号运算符

int main()
{
    int a = (1,2,3);
    int b = (++a, ++a, ++a);
    int c= (b++, b++, b++);
    printf("%d %d %d", a,b,c);
}
Run Code Online (Sandbox Code Playgroud)

我是编程初学者.我没有得到这个程序如何显示我的输出6 9 8.

c comma-operator

6
推荐指数
2
解决办法
155
查看次数

在c中,switch语句可以有2个参数吗?

int main()
{
   switch(1,2)
   {
      case 1:printf("1");break;
      case 2:printf("2");break;
      default: printf("error");break;
   }
}
Run Code Online (Sandbox Code Playgroud)

这在c中有效吗?

我认为它不应该,但是当我编译它时,它显示没有错误并产生输出2.

c syntax comma switch-statement comma-operator

6
推荐指数
1
解决办法
1791
查看次数

为什么在逗号分隔符上下文中将预增量的结果转换为 void?

std::for_each_n可能的实现

template<class InputIt, class Size, class UnaryFunction>
InputIt for_each_n(InputIt first, Size n, UnaryFunction f)
{
    for (Size i = 0; i < n; ++first, (void) ++i) {
        f(*first);
    }
    return first;
}
Run Code Online (Sandbox Code Playgroud)

我注意到我们通常看到的部分i++(或首选++i)由两个操作组成:

  • ++first
  • (void) ++i

用逗号分隔。虽然大部分都说得通,但(void)演员阵容对我来说似乎有点令人惊讶。我只能猜测是,有可能是超载operator ,,是以推导型的InputItSize这将导致一些令人吃惊的副作用。这可能是原因吗?如果是,我们确定演员void阵容完全解决了这个问题吗?

c++ casting comma-operator

6
推荐指数
1
解决办法
85
查看次数

关于 decltype + 逗号技巧的完整故事

标题应该能澄清我的困惑。我想用这个问题来获得全面的答案,这有助于我理解逗号运算符如何decltype在 SFINAE 上下文中使用。我的这个问题中显示了一个示例用法。

\n

一点研究

\n

搜索is:question [c++] [decltype] comma,可以找到以下 6 个问题

\n
    \n
  • (2011) How is decltype Should to work withoperator,有一个很有前途的标题,但它是 VisualStudio 特定的,并且唯一的答案从根本上声称编译器中确实存在错误。

    \n
  • \n
  • (2012)如何从自动返回类型推导出类型?接受的答案如下,参考表达式decltype( ( bool( fun(v[0] ) ), void() ) )

    \n
    \n
      \n
    1. 该表达式实际上bool( fun(v[0] ) )并未被求值,因为我们处于非求值上下文中(,类似于)。这里重要的是,如果整个表达式被求值,它将被求值,因此,如果子表达式无效,则整个表达式也无效。decltypesizeof
    2. \n
    3. void()并不是真正的值,但它的行为类似于逗号运算符和上下文中的值decltype
    4. \n
    \n
    \n

    我还没有真正理解。

    \n
  • \n
  • (2014) c++11 decltype …

c++ decltype sfinae comma-operator template-meta-programming

6
推荐指数
1
解决办法
433
查看次数

C中的逗号和赋值运算符

我有以下内容:

int a = 1, b = 2, c = 3, d = 4;
a = b, c = d;
printf("%d, %d, %d, %d", a, b, c, d);
Run Code Online (Sandbox Code Playgroud)

输出是:

2, 2, 4, 4
Run Code Online (Sandbox Code Playgroud)

逗号运算符如何与赋值运算符一起使用?据我所知,它会评估并返回第二个表达式,如果有的话,

(exp1, exp2)
Run Code Online (Sandbox Code Playgroud)

那么,为什么会评估a = b呢?

c c99 comma-operator

5
推荐指数
2
解决办法
561
查看次数