相关疑难解决方法(0)

如何从自动退货类型中推断出类型?

这个答案有一个这样的代码片段:

template<class T, class F>
auto f(std::vector<T> v, F fun)
    -> decltype( bool( fun(v[0] ) ), void() )
{
  // ...
}
Run Code Online (Sandbox Code Playgroud)

它真正编译和工作(至少在Ideone上).

那么,在这种情况下如何推断出类型?

c ++ 11标准真的允许下一行吗?

decltype( bool( fun(v[0] ) ), void() )
Run Code Online (Sandbox Code Playgroud)

我快速浏览了一下,看起来并不合适.在这种情况下,意识错误吗?


c ++ 11标准中的所有示例都是这样的,它们在decltype中只有一种类型:

struct A {
  char g();
  template<class T> auto f(T t) -> decltype(t + g())
  { return t + g(); }
};
Run Code Online (Sandbox Code Playgroud)

另一个例子 :

void f3() {
  float x, &r = x;
  [=] {
  decltype(x) y1;
  decltype((x)) y2 = y1; …
Run Code Online (Sandbox Code Playgroud)

c++ decltype c++11

8
推荐指数
2
解决办法
851
查看次数

这是什么?C++中的运算符吗?

考虑这个功能

template<class T> inline bool cx(T &a, T b) {return a < b ? a = b, 1 : 0;}
Run Code Online (Sandbox Code Playgroud)

任何人都能解释这究竟是做什么的吗?它似乎与典型的condition ? true : false格式不同.

c++ conditional-statements

8
推荐指数
1
解决办法
271
查看次数

循环条件的性能差异?

我有一个简单的问题,我主要是因为我的好奇.

这两行代码之间有什么区别?(在C++中)

for(int i = 0; i < N, N > 0; i++)

for(int i = 0; i < N && N > 0; i++)
Run Code Online (Sandbox Code Playgroud)

条件的选择是完全随意的,我只是对&和之间的差异感兴趣.

我不是任何编码的初学者,但我从未打扰过逗号运算符.

是否有性能/行为差异或纯粹是美学?

最后一点,我知道有一个比条件运算符更好的性能鱼,但我只是好奇.放纵我.

编辑 感谢您的回答.

事实证明,提示这个问题的代码以我描述的方式滥用了逗号运算符.我想知道区别是什么以及为什么它不是&&运算符,但它只是写得不正确.我觉得它没有任何问题,因为它运作得很好.谢谢你把我拉直了.

c++ loops comma-operator logical-operators

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

C/C++语法 - 用,而不是;分隔语句; 法律?

我刚碰到这段代码:

delete a, a = 0;
Run Code Online (Sandbox Code Playgroud)

它编译并运行得很好.但这不应该是:

delete a;
a = 0;
Run Code Online (Sandbox Code Playgroud)

为什么分离语句使用,在这种情况下允许?

谢谢 :)

c c++ syntax separator

7
推荐指数
4
解决办法
258
查看次数

这个C语句的顺序是否定义良好?

标题有点模糊,因为我真的不知道如何定义这个问题.

它与以下代码有关:

for (match         = root,
     m_matchBase   = match->requestedBase,
     m_matchLength = match->length;

     match != NULL;

     match         = match->next,
     m_matchBase   = match->requestedBase,
     m_matchLength = match->length)
{
    if (m_matchBase <= m_base && m_matchBase + m_matchLength > m_base)
        break;
    // other stuff...
}
Run Code Online (Sandbox Code Playgroud)

for循环中的语句是否保证按顺序运行?

例如,m_matchBase = match->requestedBase保证运行之后match = match->next

c sequence-points

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

C++运算符重载称为函数

我正在尝试运算符重载,发现了一些我无法解释的东西:

WeekDays.h

using namespace std;
enum DAYS
{
    MON,
    TUE,
    WED,
    THU,
    FRY,
    SAT,
    SUN
};

DAYS operator+(DAYS&a,DAYS &b)
{
    printf("Binary+ called\n");
    return (DAYS)(((unsigned int)a+(unsigned int)b)%7);
}

//Increment 3
DAYS operator+(DAYS&a)
{
    printf("Unary+ called\n");
    return (DAYS)(((unsigned int)a+3)%7);
}

ostream& operator<<(ostream&o, DAYS &a)
{
    switch(a){
    case MON: o<<"MON"; break;
    case TUE: o<<"TUE"; break;
    case WED: o<<"WED"; break;
    case THU: o<<"THU"; break;
    case FRY: o<<"FRY"; break;
    case SAT: o<<"SAT"; break;
    case SUN: o<<"SUN"; break;
    }
    return o;
};
Run Code Online (Sandbox Code Playgroud)

Main.cpp的

#include <iostream>
#include …
Run Code Online (Sandbox Code Playgroud)

c++ operator-overloading unary-operator

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

C++多维数组索引

我看过这篇文章.但是,我无法理解以下声明.

让我们说我宣布:

Declaration 1:    int jimmy [HEIGHT][WIDTH];

   Accessing 1:   jimmy[n][m]

Declaration 2: int jimmy [HEIGHT * WIDTH];


 Accessing 2:  jimmy[n*WIDTH+m]
Run Code Online (Sandbox Code Playgroud)

声明1和访问1,声明2和访问2是相同的src.

但是,jimmy [n,m]是什么意思?我写了它给我的代码地址.无法获得任何有用的信息.有人可以说这是什么意思吗?

c++ arrays multidimensional-array

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

有条件的逗号运算符

我已经阅读了很多地方,但我真的无法理解条件中的指定行为.

我理解在赋值中它会计算第一个操作数,丢弃结果,然后计算第二个操作数.

但对于这段代码,它应该做什么?

CPartFile* partfile = (CPartFile*)lParam;
ASSERT( partfile != NULL );
bool bDeleted = false;
if (partfile,bDeleted)
    partfile->PerformFileCompleteEnd(wParam);
Run Code Online (Sandbox Code Playgroud)

IF中的partfile是一个不必要的参数,或者它有什么意义?

c c++ comma-operator

5
推荐指数
1
解决办法
1340
查看次数

用两个变量无法理解for循环

当我在具有不同条件的for循环中使用两个变量时,我在for循环下面使用的两个条件i<3,j<2总是执行,直到第二个条件失败.

#include<iostream>
#include<conio.h>
using namespace std ;
int main()
{
int i,j ;
for(i=0,j=0;i<3,j<2;i++,j++)
{
    cout<<"hello" ;
}
getch() ;
return 0 ;
} 
Run Code Online (Sandbox Code Playgroud)

在该代码中,hello打印2次.为什么?

如果我使用i<3,j<10,"你好"打印10次.我无法理解为什么第一个条件被忽视了.是编译器依赖还是别的?

如果我用||这样的条件替换,那么每件事都能正常工作 (OR)或&&(AND).另一个原因是我无法在for循环中初始化i和j,它向我显示错误,但是当我在C风格中声明变量或在for循环外部声明一个变量时它工作正常,为什么会这样?

我使用的编译器是Orwell Dev C++.
提前致谢.

c++ loops for-loop declaration

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

与逗号在C/C++中的工作方式有些混淆

我已经使用SO一段时间作为参考,但之前从未问过问题.我目前正在大学C++课程中阅读Bjarne Stroutstrup 编程:原理和实践,仅仅是为了我自己的利益,因为我在这里看到了一个真正推荐它的问题的答案.

我们现在正在课堂上覆盖操作员,而我似乎无法理解逗号操作符在语句中的工作方式.一个例子是类的在线部分的示例问题,即使我编写C程序并使用GDB获取结果,我仍然会出错.问题是:

假设在下面的表达式之前x == 16,下面的表达式的值是什么(不一定是x的值)?

x ++,++ x,x + = x

我对正确答案不感兴趣,以至于如何得到正确的答案.我已经阅读了类似问题的几个答案,例如这里的问题,但似乎我错过了当实际上没有分配运算符时这是如何适用的.这跟说的一样吗

int y = (x++, ++x, x+=x);
Run Code Online (Sandbox Code Playgroud)

要么

int y = x++, ++x, x+=x;
Run Code Online (Sandbox Code Playgroud)

还是两个?有人可以解释逗号运算符的工作原理,特别是与没有赋值的语句有关吗?

c c++ comma operator-precedence operator-keyword

5
推荐指数
1
解决办法
203
查看次数