小编Alo*_*ave的帖子

GCC -Wuninitialized/-Wmaybe -ininitialized问题

我正在经历一个非常奇怪的问题gcc-4.7 (Ubuntu/Linaro 4.7.2-11precise2) 4.7.2.我没有警告就无法编译以下有效代码:

extern void dostuff(void);

int test(int arg1, int arg2)
{
    int ret;

    if (arg1) ret = arg2 ? 1 : 2;

    dostuff();

    if (arg1) return ret;

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

编译选项和输出:

$ gcc-4.7 -o test.o -c -Os test.c -Wall
test.c: In function ‘test’:
test.c:5:6: warning: ‘ret’ may be used uninitialized in this function [-Wmaybe-uninitialized]
Run Code Online (Sandbox Code Playgroud)

但是,以下代码编译时没有警告(虽然组装效率稍低):

extern void dostuff(void);

int test(int arg1, int arg2)
{
    int ret;

    if (arg1 && arg2) ret = 1;
    if (arg1 && …
Run Code Online (Sandbox Code Playgroud)

c c++ gcc gcc-warning compiler-optimization

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

重载vs重写

我对这两个术语感到有些困惑,并且很乐意澄清一些疑问.

据我所知,function overloading意味着在同一个类中具有多个方法,这些方法具有相同的名称但是具有不同数量的参数,不同类型的参数或参数序列,而不管返回类型如何对函数的错位名称没有影响.

上述定义是否还包括"....在同一个类或相关类中(通过继承相关)......"

并且Function Overriding与虚函数,相同的方法签名(在Base类中声明为虚拟)和在子类中实现的重写有关.

我想知道一个场景,以下是代码:

#include <iostream>

class A
{
    public:
    void doSomething(int i, int j)
    {
        cout<<"\nInside A::doSomething\n";
    }
};

class B: public A
{
    public:
    void doSomething(int i, int j)
    {
        cout<<"\nInside B::doSomething\n";

    }
};

int main()
{
    B obj;
    obj.doSomething(1,2);
    return 0;

} 
Run Code Online (Sandbox Code Playgroud)

在上述情况下,什么可以说:
在派生类的方法,overrides在基类的方法OR
中派生类的方法,overloads在基类的方法

重载是否适用于类范围,并且覆盖术语是否不一定适用于虚函数?

我认为它应该是overrides,但只需要澄清,因为我碰巧记得术语覆盖被特别用于虚函数.

c++ overriding overloading

12
推荐指数
4
解决办法
5655
查看次数

为什么 - GCC中的-freciprocal-math不安全?

-freciprocal-math 在GCC中更改以下代码

double a = b / c;
Run Code Online (Sandbox Code Playgroud)

 double tmp = 1/c;
 double a = b * tmp;
Run Code Online (Sandbox Code Playgroud)

在GCC手册中,据说这种优化是不安全的,并且不符合IEEE标准.但我想不出一个例子.你能举个例子吗?

c compiler-construction math precision gcc

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

原始数据类型的大小

原始数据类型的大小究竟int取决于什么?

  • 编译器
  • 处理器
  • 发展环境

或者它是这些或其他因素的组合?
对其原因的解释将非常有帮助.

编辑:对不起混淆..我想询问关于原始数据类型如int而不是关于POD,我确实理解POD可以包括结构和结构它是一个完全不同的球游戏与填充进入图片.我已经更正了Q,这里的编辑说明应该确保关于POD的答案看起来不相关.

c c++ sizeof

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

STL功能 - 为什么?

在C++标准模板库中,有一个"功能"部分,其中许多类使其()运算符超载.

在C++中使用函数作为对象是否带来任何便利?

为什么我们不能只使用函数指针呢?任何例子?

c++ stl function-pointers function-object

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

为什么在C++中使用std :: string而不是c风格的字符串?

"一个人应该总是使用std :: string而不是c风格的字符串(char *)"这是几乎所有在这里发布的源代码的建议.虽然建议无疑是好的,但正在解决的实际问题不允许详细阐述原因?建议的方面详细.这个问题是作为占位符.

一个好的答案应该包括以下几个方面(详细):

  1. 为什么要std::string在C++中使用c风格的字符串?
  2. 提到的做法有哪些缺点(如果有的话)#1
  3. 在提到的建议的反面#1是一个好的做法的情况是什么?

c++ string c-strings

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

嵌入式环境中的STL

我是一名C++程序员,多年来一直听到STL 适合在嵌入式环境中使用的概念,因此通常禁止在嵌入式环境项目中使用.我相信像Boost这样的STL库功能更强大,并提供一个更快,更容易出错的开发手段(当然语法有点吓人,但一旦过去,我认为这是一个真正的宝藏).而且,我发现STL很重要并且增加代码荒谬的最终足迹的说法因为它是模板化的,只会获得他要求的可编译代码,而不是整个STL.

我的问题是这个民粹主义者的原因是什么(至少我认为是这样的大多数人都这么认为)这个概念称STL 不适用于嵌入式环境?

我确实看到了类似性质的问题,但在此我希望能帮助指出STL和嵌入式环境的一般优缺点.

编辑:所以在这里我将按照回复的 说法将点数加起来:
1.可移植性问题
2.通过STL容器处理巨大的dymanice分配
3. STL很难调试
4. STL中的深层函数调用导致编译器性能低下内联弱(函子的力量无用!)

c++ embedded stl

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

可以用c而不是c ++做什么?

有什么东西可以在C中完成但在C++中没有,在C++编码时你最想念的是哪些?

我能想到的几件事情:

  1. 我们可以将任何类型的指针分配给void指针,而不是在c中而不是在c ++中.
  2. 声明变量名称是C++中的关键字但不是C;)

编辑:感谢@sbi指出:
1.应该是:我们可以为C中的任何类型的指针分配void指针,但不能在C++中

c c++

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

模型视图控制器设计模式代码示例

我正在研究模型 - 视图 - 控制器设计模式,我理解这个模式背后的概念,但是我想看一看如何实际将它付诸实践.
维基百科提到了Wt - Web工具包,CppCMS以及其他一些使用该模式的标准实现,但我并不熟悉这些模式,我只是希望并且真的很感激如果有人能够提供一些实现代码的示例代码(希望是C++)模式并解释了实践模式的理论.

c++ oop design-patterns

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

常量映射迭代器不会设置为mymap.begin()

map<string,Shopable*>::iterator it = mymap.begin();
Run Code Online (Sandbox Code Playgroud)

迭代器似乎是常量,但items.begin()不返回常量迭代器.或者,这就是我的想法,因为鼠标悬停错误是这样的:

"No conversion from 'std::Tree_const_iterator<...> to std::Tree_iterator<...> exists'".
Run Code Online (Sandbox Code Playgroud)

为什么?

c++ iterator constants map

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