小编Ton*_*ion的帖子

编译/链接过程如何工作?

编译和链接过程如何工作?

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

c++ compiler-construction linker c++-faq

395
推荐指数
6
解决办法
19万
查看次数

static关键字及其在C++中的各种用途

关键字static是一个在C++中具有多种含义的关键字,我发现它非常令人困惑,我永远无法理解它实际上应该如何工作.

根据我的理解,static存储持续时间,这意味着它在全局的情况下持续程序的生命周期,但是当你谈论本地时,它意味着它默认为零初始化.

C++标准对具有关键字的类数据成员说明了这一点static:

3.7.1静态存储持续时间[basic.stc.static]

3关键字static可用于声明具有静态存储持续时间的局部变量.

4应用于类定义中的类数据成员的关键字static为数据成员提供静态存储持续时间.

局部变量是什么意思?这是一个函数局部变量吗?因为还有一个当你声明一个本地函数时static,它只被初始化一次,它第一次进入这个函数.

它也只谈到关于类成员的存储持续时间,它是非实例特定的,那也是staticno 的属性?或者是存储持续时间?

那么static和文件范围的情况如何呢?是否所有全局变量都被视为默认具有静态存储持续时间?以下(来自第3.7.1节)似乎表明:

1所有没有动态存储持续时间,没有线程存储持续时间且不是本地的变量都具有静态存储持续时间.这些实体的存储应持续该计划的持续时间(3.6.2,3.6.3)

如何static与变量的链接相关?

整个static关键字是彻头彻尾的混乱,有人可以澄清英语的不同用途,并告诉我何时初始化一个static类成员?

c++ static

186
推荐指数
6
解决办法
16万
查看次数

ESI和EDI寄存器的用途?

汇编程序中EDI和ESI寄存器的实际用途和用途是什么?

我知道它们只用于字符串操作.

有人也可以举个例子吗?

x86 assembly

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

什么是线程争用?

有人可以简单解释什么是线程争用吗?

我用Google搜索了它,但似乎无法找到一个简单的解释.

language-agnostic multithreading

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

指向base的指针可以指向派生对象数组吗?

我今天去了一个面试,并得到了这个有趣的问题.

除了内存泄漏和事实上没有虚拟dtor,为什么这个代码会崩溃?

#include <iostream>

//besides the obvious mem leak, why does this code crash?

class Shape
{
public:
    virtual void draw() const = 0;
};

class Circle : public Shape
{
public:
    virtual void draw() const { }

    int radius;
};

class Rectangle : public Shape
{
public:
    virtual void draw() const { }

    int height;
    int width;
};

int main()
{
    Shape * shapes = new Rectangle[10];
    for (int i = 0; i < 10; ++i)
        shapes[i].draw();
}
Run Code Online (Sandbox Code Playgroud)

c++ pointers

98
推荐指数
3
解决办法
4489
查看次数

如何在C++中序列化对象?

我有一个小的对象层次结构,我需要通过套接字连接进行序列化和传输.我需要序列化对象,然后根据它的类型反序列化它.有没有一种简单的方法在C++中实现这一点(就像在Java中一样)?

是否有任何C++序列化在线代码示例或教程?

编辑:为了清楚,我正在寻找将对象转换为字节数组,然后返回到对象的方法.我可以处理插座传输.

c++ serialization c++-faq marshalling

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

哪个单元测试框架?

我想知道哪个单元测试框架真的很熟悉?我知道这可能是一个意见问题,但我想我还是会问.我知道有一天我需要这样做,所以我不妨学习使用它.我知道那里有很多,但哪一个对C#开发有效?

这个问题我可以看出单元测试是必要的,但我个人并没有使用它.这就是我问这个问题的原因.

.net c# unit-testing

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

在List <T>中交换两个项目

是否有LINQ方式来交换两个项目的位置list<T>

c# linq swap

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

为什么在堆栈上分配了这么多空间?

这个问题来自回答Stack Overflow问题为什么书籍会说"编译器为内存中的变量分配空间"?,我试图向OP演示当你在堆栈上分配一个变量时会发生什么,以及编译器如何生成知道要分配的内存大小的代码.显然,编译器分配的空间比需要的多得多.

但是,在编译以下内容时

#include <iostream>
using namespace std;

int main()
{
    int foo;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在调试模式下编译的Visual C++ 2012得到以下汇编程序输出,但没有优化:

int main()
{
00A31CC0  push        ebp
00A31CC1  mov         ebp,esp
00A31CC3  sub         esp,0CCh  // Allocates 204 bytes here.
00A31CC9  push        ebx
00A31CCA  push        esi
00A31CCB  push        edi
00A31CCC  lea         edi,[ebp-0CCh]
00A31CD2  mov         ecx,33h
00A31CD7  mov         eax,0CCCCCCCCh
00A31CDC  rep stos    dword ptr es:[edi]
   int foo;
   return 0;
00A31CDE  xor         eax,eax
}
Run Code Online (Sandbox Code Playgroud)

int我的程序中再添加一个,使上面的注释行显示如下:

00B81CC3  sub         esp,0D8h // Allocate 216 bytes …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-construction

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

返回函数本地的std :: string的最佳方法

在C++中,从函数返回函数local std :: string变量的最佳方法是什么?

std::string MyFunc()
{
    std::string mystring("test");
    return mystring;

}

std::string ret = MyFunc(); // ret has no value because mystring has already gone out of scope...???
Run Code Online (Sandbox Code Playgroud)

c++ return-value

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