小编Pra*_*rav的帖子

未定义的行为和序列点

什么是"序列点"?

未定义的行为和序列点之间的关系是什么?

我经常使用有趣和复杂的表达方式a[++i] = i;,让自己感觉更好.我为什么要停止使用它们?

如果您已阅读此内容,请务必访问后续问题重新加载未定义的行为和序列点.

(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)

c++ c++-faq undefined-behavior sequence-points

970
推荐指数
4
解决办法
10万
查看次数

如何总结C++向量的元素?

找到a中所有元素之和的方法是std::vector什么?

假设我有一个std::vector<int> vector包含少量元素的向量.现在我想找到所有元素的总和.有什么不同的方式?

c++ stl vector

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

ptr为NULL的free(ptr)是否会损坏内存?

从理论上讲,我可以这么说

free(ptr);
free(ptr); 
Run Code Online (Sandbox Code Playgroud)

是一个内存损坏,因为我们释放已经释放的内存.

但是如果

free(ptr);
ptr=NULL;
free(ptr); 
Run Code Online (Sandbox Code Playgroud)

由于操作系统将以不确定的方式运行,我无法对此进行实际的理论分析.无论我在做什么,这种记忆是否会腐败?

释放空指针有效吗?

c free null pointers

106
推荐指数
7
解决办法
7万
查看次数

void*p = && abc; &&是什么意思

我遇到了一段代码void *p = &&abc;.&&这里有什么意义?我知道rvalue引用,但我认为&&在这种情况下使用的是不同的.什么&&表明void *p = &&abc;

c c++ gcc operators

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

LR,SLR和LALR解析器有什么区别?

LR,SLR和LALR解析器之间的实际区别是什么?我知道SLR和LALR是LR解析器的类型,但就解析表而言,它们的实际区别是什么?

以及如何显示语法是LR,SLR还是LALR?对于LL语法,我们只需要显示解析表的任何单元格都不应包含多个生产规则.LALR,SLR和LR的任何类似规则?

例如,我们如何才能显示语法

S --> Aa | bAc | dc | bda
A --> d
Run Code Online (Sandbox Code Playgroud)

是LALR(1)但不是SLR(1)?


编辑(ybungalobill):我没有得到一个满意的答案,LALR和LR之间有什么区别.因此LALR的表格较小,但它只能识别LR语法的一个子集.有人可以详细说明LALR和LR之间的区别吗?LALR(1)和LR(1)足以应答.它们都使用1个令牌前瞻,两个都是表驱动的!它们有何不同?

compiler-construction algorithm grammar parsing

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

令人困惑的模板错误

我一直玩clang一段时间,我偶然发现了"test/SemaTemplate/dependent-template-recover.cpp"(在clang发行版中),它应该提供从模板错误中恢复的提示.

整个过程可以很容易地删除到最小的例子:

template<typename T, typename U, int N> struct X {
    void f(T* t)
    {
        // expected-error{{use 'template' keyword to treat 'f0' as a dependent template name}}
        t->f0<U>();
    }
};
Run Code Online (Sandbox Code Playgroud)

clang产生的错误消息:

tpl.cpp:6:13: error: use 'template' keyword to treat 'f0' as a dependent template name
         t->f0<U>();
            ^
            template 
1 error generated.
Run Code Online (Sandbox Code Playgroud)

...但我很难理解究竟应该插入template关键字以使代码在语法上正确?

c++ templates llvm clang

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

C#语言名称的来源

我是C和C++程序员,现在正在尝试学习C#.我已经购买了Wrox出版物的专业C#一书.

在从C迁移到C++时,我怀疑为什么++被添加到C.后来我意识到,因为++是一个增量运算符,它被添加到C只是为了提供一个"面向对象的扩展".

在C#中,有什么意义#

c# history programming-languages

72
推荐指数
4
解决办法
3万
查看次数

什么是C++中的非平凡构造函数?

我正在读这个http://en.wikipedia.org/wiki/C%2B%2B0x#Modification_to_the_definition_of_plain_old_data

它提到了普通的默认构造函数,普通的复制构造函数,复制赋值运算符,普通的析构函数.什么是微不足道而不是微不足道的?

c++ constructor

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

禁用g ++的返回值优化

我需要在命令行上使用哪些标志来禁用g ++编译器自动启用的返回值优化?

c++ compiler-construction optimization g++ return-value-optimization

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

有没有更好的方法来排列字符串?

void permute(string elems, int mid, int end)
{
    static int count;
    if (mid == end) {
        cout << ++count << " : " << elems << endl;
        return ;
    }
    else {
    for (int i = mid; i <= end; i++) {
            swap(elems, mid, i);
            permute(elems, mid + 1, end);
            swap(elems, mid, i);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的函数显示了str(str[0..mid-1]作为一个稳定的前缀和str[mid..end]一个可置换的后缀)的排列.所以我们可以permute(str, 0, str.size() - 1)用来显示一个字符串的所有排列.

但该函数使用递归算法; 也许它的表现可以改善?

是否有更好的方法来置换字符串?

c++ string algorithm permutation

50
推荐指数
4
解决办法
3万
查看次数