小编qdi*_*dii的帖子

为什么std :: string没有虚拟析构函数?

当我正在开发一个涉及用给定语言定义句子的项目时,我惊讶地发现std::string析构函数不是虚拟的.这使得专门化这个类变得更加困难(我必须创建一个包装器).为什么标准委员会决定让这个课程不虚拟?

在/usr/lib64/gcc/x86_64-pc-linux-gnu/4.5.3/include/g++-v4/bits/basic_string.h中,我们有:

template<typename _CharT, typename _Traits, typename _Alloc>
class basic_string
{
   ...

  /**
   *  @brief  Destroy the string instance.
   */
  ~basic_string()
  { _M_rep()->_M_dispose(this->get_allocator()); }
Run Code Online (Sandbox Code Playgroud)

c++ string virtual std

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

数组访问中的二进制搜索比使用哈希表更快吗?

本网站的 4.4节中,建议二进制搜索数组而不是使用哈希表.那个怎么样?

c++ optimization

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

如何将automake安装头文件放在include的子目录中

我当前的项目在其include/tatoparser目录中有几个文件,我想与我的库一起分发.

qdii@nomada ~/MyProject $ ls include/tatoparser/
dataset.h  interface_lib.h  linkset.h  sentence.h  tagset.h
Run Code Online (Sandbox Code Playgroud)

我创建了一个Makefile.am引用这些文件:

qdii@nomada ~/MyProject $ cat include/Makefile.am 
include_HEADERS = tatoparser/interface_lib.h tatoparser/sentence.h tatoparser/dataset.h tatoparser/tagset.h tatoparser/linkset.h
Run Code Online (Sandbox Code Playgroud)

但是,当我运行make install引用的文件被复制到/usr/include(或$(includedir)设置为)时,我希望它们被复制/usr/include/tatoparser.

我怎样才能做到这一点?

autoconf makefile autotools libtool

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

两个弦之间的距离

我不相信标准库提供了任何计算两个字符串之间距离的东西,我似乎无法在Boost StringAlgo中找到任何东西.那么,我可以使用其他任何库吗?

我对这个算法不太挑剔.Jaro-Winkler也很好,Levenshtein也是如此,我愿意接受建议,我不想编写某人已编码的内容.

c++ string algorithm distance

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

简化布尔方程

我有一个布尔方程,并希望简化它.帮助它.

bool needLoad = isA || (!isA && !isB);
Run Code Online (Sandbox Code Playgroud)

然后我用它

if (needLoad){
       if (isA)
           rawData = Configuration.GetData();
       if (!isA && !isB)
           rawData = Configuration.GetOtherData();
}
Run Code Online (Sandbox Code Playgroud)

boolean

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

在C++ 03中定义覆盖是否合法

我们有一个使用许多C++ 11工具的项目,我们考虑过这个技巧,使它在C++ 03上编译.

#ifndef USE_CPP0X
#    define override
#endif
Run Code Online (Sandbox Code Playgroud)

据我所知,禁止定义C++关键字,这是合法的吗?

c++ c++11 c++03

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

为什么glGetUniformBlockIndex()会返回INVALID_INDEX?

我在程序中使用以下顶点着色器,但由于某种原因,glGetUniformBlockIndex(id, "draw2DQuadVS")返回INVALID_INDEX.

程序在使用前正确链接,并传递正确的ID.此外,没有设置opengl错误.任何解释?

    #version 410
    uniform CBPostProcessVS
    {
        vec4  f4_Proj2DTo3D;
    } postProcessVS;

    uniform CBDraw2DQuadVS
    {
        vec4  f4_PositionOffsetAndScale;
        vec4  f4_TexcoordOffsetAndScale;
    } draw2DQuadVS;

        in vec3 vPosition;
    in vec2 vTexcoord0;
    in vec4 vColor0;
    in vec3 vTangent;
    in vec3 vBinormal;
    in vec3 vNormal;


    out vec2 v_vTexcoord0;
    out vec3 vPosFactor;


    void main()
    {    
        vec2 pos = (vec2(vPosition) * draw2DQuadVS.f4_PositionOffsetAndScale.zw) + vec2(draw2DQuadVS.f4_PositionOffsetAndScale);
        vec2 uv = (vec2(vTexcoord0) * draw2DQuadVS.f4_TexcoordOffsetAndScale.zw) + vec2(draw2DQuadVS.f4_TexcoordOffsetAndScale);

        gl_Position = vec4(pos,0,1);
        v_vTexcoord0 = uv;

        vPosFactor.xy = uv * vec2(postProcessVS.f4_Proj2DTo3D) + …
Run Code Online (Sandbox Code Playgroud)

opengl uniform vertex-shader

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

向量中包含的对象有什么要求

在Exceptional C++中,Herb Sutter写道auto_ptr:

问题是auto_ptr不能完全满足您可以放入容器的类型的要求,因为auto_ptrs的副本不等同.

这本书是关于C++ 03编写的,我想知道这是否仍然有效,因为这段代码似乎在GCC 4.7.1下完美编译:

#include <vector>

struct Foo
{
    Foo() { }
    Foo( Foo&& ) { }
    Foo( Foo& ) = delete;
    Foo& operator= (Foo&&) { return *this; }
    Foo& operator= (Foo&) = delete;
};

int main()
{
    std::vector<Foo> bar;
    bar.push_back(Foo());
}
Run Code Online (Sandbox Code Playgroud)

但是接受可移动但不可复制的对象也可以是GCC扩展.我不确定.std::vector对象的要求是什么?

c++ vector stdvector c++11

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

什么是在不打开整数的情况下读取每一行的最有效方法?

什么是在不打开整数的情况下读取每一行的最有效方法?我每行只有一个整数,即:num.txt

100
231 
312
...
Run Code Online (Sandbox Code Playgroud)

在我的程序中,我使用while循环读取它;

int input = 0;
while(cin >> input)
{        
// Assignment
}
Run Code Online (Sandbox Code Playgroud)

我曾经time a.out <num.txt在Linux上阅读过它,事实证明,读取1亿个数字大约需要15秒(用户时间)。所以我想知道是否有更好的方法来减少用户时间?

先感谢您!

c++

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

在数组上调用赋值运算符

我想知道这段代码是如何工作的:

struct my_array
{
    int r[1000];
};

int main()
{
    my_array foo, bar;
    foo = bar;
}
Run Code Online (Sandbox Code Playgroud)

因为foo = bar调用将调用operator=为类提供的构造函数,它将懒惰地将它应用于每个成员.但是数组没有实现operator=,证明是,这段代码无法编译:

int main()
{
    int a[1000], b[1000];
    a = b;
}
Run Code Online (Sandbox Code Playgroud)

那我的第一个代码怎么编译呢?

c++ arrays assignment-operator

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