小编Rob*_*Hsu的帖子

C ++条件单向迭代器

我想实现以下伪代码:

string foo;  // or vector<int> foo;
auto itr = bar?  foo.begin() : foo.rbegin();
auto end = bar?  foo.end() : foo.rend();
for (  ; itr != end; ++itr) {
// SomeAction ...
}
Run Code Online (Sandbox Code Playgroud)

也就是说itr,根据某些条件,我想设置为正向迭代器或反向迭代器,bar以正向或反向扫描。

显然,这样的代码将不起作用,因为正向迭代器和反向迭代器具有不同的类型。

请注意,我不想分成两个循环,因为这些代码// SomeAction将重复。

我怎样才能做到这一点?首选使用C ++ 11和/或更低版本的答案。

另外,请详细说明字符串和向量是否具有不同的解决方案。

c++ c++11

29
推荐指数
4
解决办法
1899
查看次数

我可以从外部访问函数内的静态变量吗?

C/C++:我可以从外部访问函数内的静态变量吗?例如:

#include <iostream>
using namespace std;

void f()
{
    static int count = 3;
    cout << count << endl;
}

int main(int argc, char** argv)
{
    f::count = 5;   // apparently this is an invalid syntax.
    f();

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

c c++

10
推荐指数
2
解决办法
5916
查看次数

在std :: greater和std :: less上的C++ 11条件表达式得到了不同类型的错误

以下与条件表达式相关的代码:

typedef unsigned char uchar;
uchar data[100];
// assign something to array[] here
uchar *start = data;
uchar *end = data+100;
bool cond = f();  // f() could return true or false
uchar *itr = std::upper_bound(start, end, uchar(20), 
                cond? std::greater<uchar>() : std::less<uchar>());
Run Code Online (Sandbox Code Playgroud)

得到这样的错误:

error: operands to ?: have different types 
‘std::greater<unsigned char>’ and ‘std::less<unsigned char>’
Run Code Online (Sandbox Code Playgroud)

这是编译器错误吗?根据我的直觉,这两个仿函数应该具有相同的类型.

c++ c++11

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

C++/C int32_t和printf格式:%d或%ld?

在某些平台上,int32_t(来自stdint.h)是long int,但在其他平台上,它可能是int.当我想使用时printf,我如何确定"%ld""%d"应该使用哪种格式?

或者,也许,我应该强制将其转换为如下所示:

int32_t m;
m = 3;
printf ("%ld\n", (long)m);
Run Code Online (Sandbox Code Playgroud)

但这种解决方案很乏味.有什么建议?

c c++ printf

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

C++评论风格:/*M ... M*/,'M'代表什么?

我看过一些第三方源代码,其中包含/*M ... M*/样式注释.但'M'代表什么?(也许它与某种版本控制或代码文档系统(如doxygen)一起使用?)

我在opencv中的许多(如果不是全部)源代码文件中看到了它.

您可以点击此处浏览Ititz在GitHub下的opencv存储库 .

哦.我忘了提一下,评论样式似乎只存在于文件的头部,而且它似乎宣布了许可证.

示例:

/*M///////////////////////////////////////////////////////////////////////////////////////
//
//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
//
//  By downloading, copying, installing or using the software you agree to this license.
//  If you do not agree to this license, do not download, install,
//  copy or use the software.
//
//
//                           License Agreement
//                For Open Source Computer Vision Library

[...]
//
//M*/
Run Code Online (Sandbox Code Playgroud)

c++

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

如何从设备直接输入 Unicode?我想要一个“机器接口设备”而不是“人机接口设备”(HID)

例如,USB 条码扫描器可以充当 HID 键盘来输入字符。但是,要输入英语以外的某些外语,例如 Unicode,HID 键盘可能会遇到困难。HID 键盘模仿键盘行为,这取决于所选的 IME。因此,它没有唯一的、通用的方式来输入某些 Unicode 字符。

是否有任何定义的“机器接口设备”(MID)而不是 HID?或如何实现 USB 设备(甚至 USB 以外的其他接口)以直接输入 Unicode 字符?

keyboard unicode hid

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

比较运算符重载与转换运算符的 C++ 优先级

考虑以下程序:

#include <iostream>

using namespace std;

class Foo {
public:
    int k;

    operator int() {
        cout << "convert int" << endl;
        return k;
    }

#if USE_COMPARE
    bool operator < (int rhs) {
        cout << "compare with" << endl;
        return (k < rhs);
    }
#endif
};

int main()
{
    Foo f;
    f.k = 3;
    int m = 5;


    if (f < m) {
        cout << 1 << endl;
        return 1;
    }
    cout << 0 << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

USE_COMPARE …

c++ operator-overloading operator-precedence

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

构造函数执行顺序/顺序:函数中静态变量(类实例)的依赖初始化

对于以下代码段:

class Bar {
public:
    int x;
    int y;
    Bar(int _x, int _y) {  /* some codes here */ ...}
};
class Foo {
public:
    int x;
    int y;
    int z;
    Foo(Bar b):x(b.x), y(b.y)
    {
        z = someFunction(x, y);
    }
};

void f(int x, int y)
{
     Bar b(x, y);
     static Foo x(b);
}
int main()
{
     f(2, 3);
}
Run Code Online (Sandbox Code Playgroud)

在我看来,函数内部的静态变量应该在之前初始化main().然而,静态变量x类型Foo取决于局部变量b类型Bar.

问题是:

1)什么时候x执行构造函数?ie是否x首次调用局部变量进行初始化b?我不想要一些特殊的编译器案例的特定结果,但想知道它是否在C++语言中定义良好.

2)这是一个有效的计划吗? …

c++

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

C/C++编译器是否会对可交换运算符(例如:+,*)重新排序以优化常量

请问以下代码的第2行

int bar;
int foo = bar * 3 * 5;
Run Code Online (Sandbox Code Playgroud)

被优化为

int bar;
int foo = bar * 15;
Run Code Online (Sandbox Code Playgroud)

甚至更多:

int foo = 3 * bar * 5;
Run Code Online (Sandbox Code Playgroud)

可以优化吗?

目的实际上是问我是否可以写

int foo = bar * 3 * 5;
Run Code Online (Sandbox Code Playgroud)

代替

int foo = bar * (3 * 5);
Run Code Online (Sandbox Code Playgroud)

保存括号.(并且减轻了手动操作那些常量排序的需要=>并且在许多情况下,使用相关变量的分组常量更有意义,而不是为了优化而分组常量)

c++ optimization

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

TDM在“TDM-gcc”中代表什么?

我已经在很多网站上搜索过这个,但都失败了。但是TDM在“TDM-gcc”中代表什么?当我想选择 gcc 作为编译器时,我很困惑。那么,有什么区别呢?我应该选择TDM还是NON-TDM?还是 TDM 仅适用于 minGW?在 Windows 平台上?

官方 TDM-gcc 站点甚至不解释它...

gcc tdm-mingw

2
推荐指数
1
解决办法
2726
查看次数

如何在Cygwin中为git设置以CRLF模式结尾的系统默认行?

有没有一种方法可以将默认行结束模式设置为与git的系统默认(Cygwin的)不同?

我在Cygwin上同时使用了Windos-Git(即GitBash)和本地git。我的问题的根本原因是CYGWIN认为自己是un * x,因此默认的行尾设置为LF。但是,CYGWIN在Windows上运行,并且大多数其他协作软件,包括GitBash,都希望行结束模式为CRLF。

我之所以使用这两者,是因为我管理git数据库,并且需要确保不同git工具/客户端对不同工程师的可用性。

在Cygwin中,当我将core.crlf设置为true时,它不会为我将文本文件转换为CR / LF,因为Cygwin认为自己是un * x。

GIT中是否有设置告诉git强制git使用CR / LF,因为它是“自动”转换的默认设置?-或者-对于这种情况有解决方案吗?

git cygwin

2
推荐指数
1
解决办法
2604
查看次数

将类A的reinterpret_cast向量转换为类B的向量

说我有两个班A,并B和阶级的载体A如下:

class A {
    int foo;
    int bar;
    void someMethod();
};
class B {
    uint foo;
    uint bar;
    void someOtherMethod();
};
std::vector<A>  va;
Run Code Online (Sandbox Code Playgroud)

并且我想将其解释va为B的向量,因为int并且uint可以重新解释.

重新解释的最佳做法是什么?例如,如果我想要调用someOtherMethod()va,我能做到((std::vector<B> *)(&va))->someOtherMethod().但这是最好的做法吗?

在我看来,这reinterpret_cast<std::vector<B> >(va).someOtherMethod()不起作用.

另外,我正在研究C++ 03.

- 更新 -

很抱歉我误解了自己的问题.然而,我的问题与这个问题有很大的不同.所以我创造了另一个问题在这里.

我将很快结束这个问题:这个问题可以看作是一个独立的问题,我认为下面的答案之一已经足够被接受了.

c++ c++03

0
推荐指数
1
解决办法
1139
查看次数

Git:显示"假定未更改"的文件

update-index --assume-unchangedStackoverflow:Ignore Tracked文件中做了回答之后,如何列出这些文件?

我已经在很多文件上做了这个,现在我需要一个列表,以便我可以撤消效果...

git

0
推荐指数
1
解决办法
99
查看次数