在C++我知道static和global对象之前构造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)
5和4存储的位置?初始化时如何管理它们?编辑:
澄清第二个问题.
5来初始化 global_int1,这样怎么能编译器分配 5到global_int?例如,编译器可能首先将5值存储在某处(即表),并在初始化开始时获取此值.来自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参数不会影响接口和/或功能的功能.这两个功能实际上完成了同样的事情.为什么要打扰实施两份?
我在Google 上阅读了几篇关于C++初始化的帖子,其中一些文章指导我在StackOverflow上.我从这些帖子中挑选的概念如下:
我有几个关于初始化问题的查询(存储类问题也可能相关):
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) 我读了标准xvalue.它与rvalue reference表达密切相关.但是在编程时,我真的找不到需要的场景xvalue.
例如:函数myClass&& f()返回一个rvalue reference.所以表达式f()是xvalue.但这有用吗?如何在编程中使用这种技术?
如果myClass g()定义了另一个函数,g()和之间有什么区别f()?
我应该在什么情况下使用f() and xvalue而不是g() prvalue?
从Java Tutorial站点,我们知道InputStreamReader并OutputStreamWriter可以在字节和字符之间转换流.
InputStreamReader将从输入读取的字节转换为字符,同时OutputStreamWriter将字符转换为字节以输出.
但什么时候应该使用这两个类?
我们Inputstream/OutputStream逐字节Reader/Writer输入/输出,逐字符输入/输出.
因此,当使用InputStreamReader从字节流输入字符时,为什么不直接使用Reader类(或其子类)来读取字符?为什么不直接使用OutputStream而不是OutputStreamWriter写字节?
编辑:我什么时候需要使用InputStreamReader和OutputStreamWriter在字节和字符之间转换流?
编辑: 在哪种情况下我应该关心编码方案?
我是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)
问题是我只能输出两层树。以数据为例, …
在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。
我的问题是如何按顺序正确关闭fos和oos。应该先关闭哪一个?或者只需要关闭其中一个。通常关闭两个流都会起作用,但我对这种方式感到不舒服,因为我不理解语义。我只是使用 close 方法来关闭所有内容,而我不知道为什么不直接 closefos或oos。
有时,我想自己从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++ 标准时,我读到这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?
我要求用户在控制台上输入一个字符串.但我不知道字符串的长度.
如何定义一个结构以适应具有可变长度的输入?
int main(){
int i;
char s[10];
cout << "input string:";
cin >> s;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果输入字符串长度超过10,示例代码将导致堆损坏.
我正在尝试测试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)