小编Rob*_*obᵩ的帖子

如何忽略eol更改和svn中的所有空格?

结合svn diff --ignore-eol-style和--ignore-all-space不起作用:

$ svn diff -x -w --ignore-eol-style -r 1143:1177 somefile
svn: invalid option: --ignore-eol-style
Run Code Online (Sandbox Code Playgroud)

和,

$ svn diff -x --ignore-eol-style -x --ignore-all-space -r 1143:1177 somefile
Run Code Online (Sandbox Code Playgroud)

仅执行最后一个选项:ignore-all-space

以前有人处理过吗?

svn whitespace eol

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

用于检查两个正则表达式是否相等/同构的库

我需要一个库,它将接受两个正则表达式并确定它们是否是同构的(即匹配完全相同的字符串集合)例如a | b与[ab]同构

据我所知,一个正则表达式可被转换为NFA在某些情况下可以有效地转换为DFA.然后可以将DFA转换为最小DFA,如果我理解正确的话,它是唯一的,因此可以比较这些最小DFA的相等性.我意识到并非所有正则表达式NFA都可以有效地转换为DFA(特别是当它们是从Perl Regexps生成而不是真正的"常规"时),在这种情况下理想情况下,库只会返回错误或其他指示转换是不可能.

我在网上看到大量关于这样做的文章和学术论文(甚至是一些课程要求学生这样做的编程任务),但我似乎无法找到实现这一功能的库.我更喜欢Python和/或C/C++库,但是任何语言的库都可以.有谁知道这样的图书馆?如果没有,有人知道我可以用作起点的图书馆吗?

c c++ python regex nfa

25
推荐指数
1
解决办法
1173
查看次数

C和C++中的嵌套结构

在C中允许嵌套结构在结构外部的可见性是否有任何意义,但在C++中却没有?我没有找到任何参考或相关性.

struct a
{
  struct b{
  };
};

int main(){
  struct b var;  // allowed in C not in C++.
}
Run Code Online (Sandbox Code Playgroud)

c c++

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

将字符串分配给char数组

我想知道为什么第一个语句有效,为什么不用c ++中的第二个语句

char a[10]="iqbal";  // it works

a="iqbal"; // does not work 
Run Code Online (Sandbox Code Playgroud)

c++

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

std :: vector-like类优化以容纳少量项目

在程序的一个时间关键部分,有一个类的成员看起来像这样:std :: vector m_vLinks; 在分析期间,我注意到大约99.98%的执行此向量仅包含0或1个项目.然而,在极少数情况下它可能会持有更多.根据探查器,这个向量肯定是一个瓶颈,所以我正在考虑如下优化:

  1. 使用类似矢量的界面制作手工制作的类
  2. 这个类将包含真正的大小,一个项目和指向向量的可选指针
  3. 在这种情况下,当vector保存1个项目时,将不会有任何动态内存分配,并且由于删除了一个间接,访问该项目也会(更快).
  4. 当我们需要持有更多数据时,动态分配向量
  5. 当然,这个向量不会提供一个存储块来保存所有项目(这里不需要),而且一些操作也会更复杂

在开始对这个东西进行原型设计以确定它是否有帮助之前,我想知道是否有人在某些第三方库中遇到了具有类似功能的自定义容器?

我已经考虑过boost :: array,但是不希望它强加的大小限制

c++ optimization stl micro-optimization

19
推荐指数
3
解决办法
5326
查看次数

什么时候ofstream :: open会失败?

我正在尝试使用C++进行try,catch,throw语句处理文件,并且我编写了一个虚拟代码来捕获所有错误.我的问题是为了检查我是否有这些权利,我需要发生错误.现在,我可以infile.fail()通过简单地不在目录中创建所需名称的文件来轻松检查.但是,我怎么就能检查同为outfile.fail()(outfileofstream这里的infileifstream).在哪种情况下,值outfile.fail()是真的吗?

示例代码[来自对unapersson的回答的评论,简化为使问题更清晰 - -zack]:

#include <fstream>
using std::ofstream;

int main() 
{
    ofstream outfile;
    outfile.open("test.txt");
    if (outfile.fail()) 
        // do something...... 
    else 
        // do something else..... 
    return 0; 
}
Run Code Online (Sandbox Code Playgroud)

c++

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

make文件中的=和+ =有什么区别?

以下陈述中的工作区别是什么?

 LDDIRS := -L$(ORACLE_LIB)
 LDDIRS += -L$(ORACLE_LIB)
Run Code Online (Sandbox Code Playgroud)

unix linux makefile

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

理解-Weffc ++

考虑以下程序:

#include <string>

struct S {
    S (){}

private:
    void *ptr = nullptr;
    std::string str = "";
};

int main(){}
Run Code Online (Sandbox Code Playgroud)

在使用-Weffc++GCC 4.7.1 编译时,这将吐出:

warning: 'struct S' has pointer data members [-Weffc++]
warning:   but does not override 'S(const S&)' [-Weffc++]
warning:   or 'operator=(const S&)' [-Weffc++]

这通常没问题,除了这个例子的几个东西:

  1. 如果我注释掉任何构造函数,指针声明或字符串声明,警告就会消失.这很奇怪,因为你认为指针就足够了,但事实并非如此.此外,将字符串声明更改为整数声明也会导致它消失,因此只有在有字符串(或可能是其他选择类)时才会出现.为什么在这种情况下警告会消失?

  2. 通常,当所有指针都在指向现有变量(通常由OS维护)时,会出现此警告.没有new,没有delete.当复制带有句柄的类时,我不想要深层复制.我希望两个句柄指向同一个内部对象(例如窗口).有没有办法让编译器实现这一点,而不会不必要地重载复制构造函数和赋值运算符,或完全禁用警告#pragma?当三法则甚至不适用时,为什么我首先被困扰?

c++ pointers g++ compiler-warnings rule-of-three

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

为什么我不能用T = vector <int>实例化operator <<(ostream&,vector <T>&)?

在考虑C++迭代器问题时,我编写了这个示例程序:

#include <vector>
#include <iostream>
#include <iterator>
#include <algorithm> 

template <class T>
std::ostream& operator<<(std::ostream&os, const std::vector<T>& v) 
{ 
    os<<"(";
    std::copy(v.begin(), v.end(), std::ostream_iterator<T>(os, ", "));
    return os<<")";
}

int main()
{
    std::vector<int> v(3);
    std::vector<std::vector<int> > vv(3, v);
    std::cout << v << "\n"; // this line works
    std::cout << vv << "\n"; // this line produces error
}
Run Code Online (Sandbox Code Playgroud)

我用gcc编译这个程序,得到典型的100行错误.我相信相关部分是:

it.cc:19:从这里实例化

/usr/include/c++/4.4/bits/stream_iterator.h:191:错误:' ((std :: ostream_iterator>,char,std :: char_traits>)中的'operator <<'不匹配- > std :: ostream_iterator>,char,std :: char_traits> :: _ M_stream << __value'

为什么这会失败?在我的模板中 …

c++ templates iostream

13
推荐指数
2
解决办法
3142
查看次数

"using"关键字用于基类变量

我正在浏览WildMagic 5引擎(www.geometrictools.com),其中Vector <>类继承自Tuple <>类,该类具有特定大小的数组,名为mTuple[](由模板参数设置).到目前为止这么好,没什么特别的.但是在Vector类中,我看到以下内容:

protected:
    using Tuple<4,Real>::mTuple; 
Run Code Online (Sandbox Code Playgroud)

现在我知道该using关键字用于正确继承重载方法.在这种情况下,我总是假设变量可用于派生类而无需键入上面的代码.以上是必要的吗?或者只是为了让事情更清楚?

c++ inheritance using-statement

13
推荐指数
2
解决办法
3465
查看次数