小编Zac*_*ary的帖子

何时初始化静态和全局变量?

C++我知道staticglobal对象之前构造main函数.但是如你所知,之前C没有这种类型.initialization proceduremain

例如,在我的代码中:

int global_int1 = 5;
int global_int2;
static int static_int1 = 4;
static int static_int2;
Run Code Online (Sandbox Code Playgroud)
  • 这四个变量何时初始化
  • 在编译期间初始化值54存储的位置?初始化时如何管理它们?

编辑:
澄清第二个问题.

  • 在我的代码使用5初始化 global_int1,这样怎么能编译器分配 5global_int?例如,编译器可能首先将5值存储在某处(即表),并在初始化开始时获取此值.
  • 至于"如何在初始化时管理它们?",它真的很模糊,我自己也不知道如何解释.有时候,解释一个问题并不容易.忽略它,因为我还没有完全掌握这个问题.

c++ static initialization global-variables

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

顶级const不影响函数签名

来自C++ Primer第5版,它说:

int f(int){ /* can write to parameter */}
int f(const int){ /* cannot write to parameter */}
Run Code Online (Sandbox Code Playgroud)

这两个功能难以区分.但是如您所知,这两个函数在更新参数方面确实存在差异.

有人可以向我解释一下吗?


编辑
我想我没有很好地解释我的问题.我真正关心的是为什么C++不允许这两个函数同时作为不同的函数,因为它们在"是否可以写入参数"方面确实不同.直观地说,应该是!


编辑传递值
的性质实际上是通过将参数值复制到参数值来传递的.即使对于复制值为地址的引用指针也是如此.从来电者的角度来看,无论是常量还是非常量传递给函数不会影响复制到参数(当然类型)值.复制对象时 ,顶级const低级const之间的区别很重要.更具体地说,顶级const(不是
低的const)复制对象时会被忽略,因为复制不会影响复制的对象.复制或复制的对象是否为const无关紧要.
因此对于呼叫者来说,区分它们是没有必要的.可能,从功能的角度来看,顶级const参数不会影响接口和/或功能的功能.这两个功能实际上完成了同样的事情.为什么要打扰实施两份?

c++ const function signature

9
推荐指数
3
解决办法
1462
查看次数

零初始化和本地范围静态变量的静态初始化

我在Google 上阅读了几篇关于C++初始化的帖子,其中一些文章指导我在StackOverflow上.我从这些帖子中挑选的概念如下:

  • 顺序 C++的初始化的是:
    1. 零初始化 ;
    2. 静态初始化 ;
    3. 动态初始化.
  • 静态对象(包括变量)首先进行零初始化,然后进行静态初始化.

我有几个关于初始化问题的查询(存储类问题也可能相关):

  • 全局对象(没有静态关键字定义)也是静态对象,对吧?
  • 全局对象也像上面的两个步骤一样初始化为静态对象,对吗?
  • 什么是静态初始化?它是指初始化静态对象(使用static关键字定义)?
  • 我还读到当执行线程首次进入块时,使用static关键字在块(即在函数中)中定义的对象被初始化!这意味着在执行函数之前不会初始化本地静态对象.这意味着它们没有被初始化为上面提到的两个步骤,对吗?
  • 动态初始化是指由new运算符创建的对象的初始化,对吧?它可能会引用初始化,如myClass obj = myClass(100);myClass obj = foo();

我对初始化和存储类说明符问题的查询太多了.我阅读了C++ 2003标准文档,但由于它们分散在整个文档中,所以无法找到明确的逻辑.

我希望你给我一个答案,从逻辑上解释存储类说明符和初始化的整个映射.欢迎任何参考!

代码可以解释我的问题:

class myClass{
public:
   int i;
   myClass(int j = 10): j(i){}
   // other declarations
};

myClass …
Run Code Online (Sandbox Code Playgroud)

c++ static initialization global-variables

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

使用xvalue的地点和时间?

我读了标准xvalue.它与rvalue reference表达密切相关.但是在编程时,我真的找不到需要的场景xvalue.

例如:函数myClass&& f()返回一个rvalue reference.所以表达式f()是xvalue.但这有用吗?如何在编程中使用这种技术?

如果myClass g()定义了另一个函数,g()和之间有什么区别f()

我应该在什么情况下使用f() and xvalue而不是g() prvalue

c++ reference xvalue

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

我什么时候应该使用InputStreamReader和OutputStreamWriter?

Java Tutorial站点,我们知道InputStreamReaderOutputStreamWriter可以在字节和字符之间转换流.

InputStreamReader将从输入读取的字节转换为字符,同时OutputStreamWriter将字符转换为字节以输出.

但什么时候应该使用这两个类?

我们Inputstream/OutputStream逐字节Reader/Writer输入/输出,逐字符输入/输出.

因此,当使用InputStreamReader从字节流输入字符时,为什么不直接使用Reader类(或其子类)来读取字符?为什么不直接使用OutputStream而不是OutputStreamWriter写字节?


编辑:我什么时候需要使用InputStreamReader和OutputStreamWriter在字节和字符之间转换流?


编辑: 在哪种情况下我应该关心编码方案?

java unicode stream utf-8

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

在Linux中使用python创建类似于pstree命令的进程树

我是python的新手。我想编写一个在上输出树状图形的程序stdout。我理想的输出是:

0
|__0
|__4
|  |__360
|      |__1000
272
|__3460
Run Code Online (Sandbox Code Playgroud)

我收集的数据如下:

0       : [0, 4]
4       : [360]
272     : [3460]
368     : [4184]
472     : [504, 576, 7016]
568     : [584, 640]
576     : [664, 672]
640     : [1048]
664     : [368, 372, 512, 788]
788     : [2120, 2720, 2976, 2996, 3956, 3980]
Run Code Online (Sandbox Code Playgroud)

左列是父进程ID,右列是子进程ID。我将数据放在名为的字典中dic。因此,字典key是父进程ID,而字典value是由子进程ID组成的列表。

我的代码是这样的:

for key in dic.keys():
    print key, '\n|'
    for v in dic[key]:
        print '__', v, '\n|'
Run Code Online (Sandbox Code Playgroud)

问题是我只能输出两层树。以数据为例, …

python tree dictionary process

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

Java-关闭多层流包装器

在Java中,我们通常使用一个流对象来包装另一个流类以提高效率。例如:

Object obj = new MyClass();
try {
    FileOutputStream fos = new FileOutputStream("test.txt");
    ObjectOutputStream oos = new ObjectOutputStream(fos);

   oos.writeObject(obj);
   oos.flush();
} catch(IOException e) {
    e.printStackTrace();
} finally {
    fos.close();
    oos.close();
}
Run Code Online (Sandbox Code Playgroud)

我用来ObjectOutputStream包裹FileOutputStream。类似的情况是使用BufferedReader包装InputStreamReader

我的问题是如何按顺序正确关闭fosoos。应该先关闭哪一个?或者只需要关闭其中一个。通常关闭两个流都会起作用,但我对这种方式感到不舒服,因为我不理解语义。我只是使用 close 方法来关闭所有内容,而我不知道为什么不直接 closefosoos

java stream

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

我应该阅读哪个C++ ISO标准的PDF?

有时,我想自己从C++标准中搜索答案.阅读标准可能有助于我概述所提出的语言原则.

通过搜索互联网,我感到困惑的是充斥着C++论坛和帮助网站.它们提供各种PDF文件供阅读.

我不知道应采用哪个PDF文件和/或哪个版本.

我找到了几个网站:

我想知道是否有一个标准发布的网站.在解决问题时我应该参考哪个版本?有人说C++ 98,有些人说C++ 11,甚至是最新的工作草案.(许多草稿令我困惑).


编辑
我从标准中找到了一个有用的信息,其中写道:

除了最终的标准/报告外,所有C++委员会文件都是免费公开发布的,包括所有工作草案,其中许多与发布的标准非常接近.2012年1月的工作草案包含C++ 11标准以及次要的编辑更改.

2012年1月的工作草案是N3337.
希望这能帮到你们.


编辑
来自 Wiki C++ 11,它写道:

与已发布的C++ 11标准最相似的工作草案是2012年1月12日的N3337; 它只有C++ 11标准的编辑更正.

c++ standards iso

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

当 static_cast 从派生类到基类时会发生什么?

在阅读 C++ 标准时,我读到这static_cast是一种直接初始化(C++ 标准 8.5/15)。
我认为这意味着在 a 期间static_cast,调用相应的重载构造函数。
例如,有一个类型 B 和从 B 派生的类型 D,以及一个对象D d。那么表达式static_cast<B>(d)就是static_cast表达式。

作为标准手段,该static_cast表达式是直接初始化。这是否意味着这将调用 type 的构造函数B并返回 type 的新构造对象B


编辑
另一个问题是B & b = dor怎么样B b = d?这两个语句是否涉及 的构造函数B

c++ constructor static-cast

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

从控制台获取字符串但不知道长度

我要求用户在控制台上输入一个字符串.但我不知道字符串的长度.

如何定义一个结构以适应具有可变长度的输入?

int main(){
    int i;
    char s[10];

    cout << "input string:";
    cin >> s;

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

如果输入字符串长度超过10,示例代码将导致堆损坏.

c++ string iostream input

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

为什么RVO不能与移动构造函数一起使用?

我正在尝试测试RVO右值参考.这是代码:

#include <iostream>

using namespace std;

class B{
public:
    int i;

    B(){
        i = 0;
        cout << "B() " << i << endl;
    }

    B(const B& b){
        i = 1;
        cout << "B(const B&) " << i << endl;
    }

    B(const B&& b){//if remove this constructor, then call B(const B& b)
        i = 2;
        cout << "B(const B&&) " << i << endl;
    }

    ~B(){
        cout << "~B() " << i << endl;
    }
};

B …
Run Code Online (Sandbox Code Playgroud)

c++ copy-constructor rvo

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