- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我从 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 obj1;//global scope
static myClass obj2(2);//file scope
{ //local scope
myClass obj3(3);
static myClass obj4(4);
}
编辑:
如果你觉得我的问题比较繁琐,你可以根据上面的代码帮忙解释一下你的想法。
最佳答案
I read several posts on C++ initialization from Google, some of which direct me here on StackOverflow. The concepts I picked from those posts are as follows:
- The order of initialization of C++ is:
- Zero Initialization;
- Static Initialization;
- Dynamic Initialization.
是的,确实有 3 个阶段(在标准中)。在继续之前让我们澄清一下:
一个简单的例子:
int const i = 5; // constant initialization
int const j = foo(); // dynamic initialization
- Static objects (variables included) are first Zero-initialized, and then Static-initialized.
是也不是。
标准要求对象首先被零初始化,然后它们是:
注意:在常量初始化的情况下,编译器可能会按照 as-if 规则忽略第一个零初始化内存。
I have several inquiries as to the initialization issue (storage class issue may be related as well):
- Global objects (defined without static keyword) are also static objects, right?
是的,在文件范围内,static
对象只是符号的可见性。全局对象可以通过名称从另一个源文件中引用,而 static
对象名称对于当前源文件来说是完全本地的。
混淆源于世界 static
在许多不同情况下的重用 :(
- Global objects are also initialized like static objects by two steps like above, right?
是的,事实上本地静态对象也是如此。
- What is the Static Initialization? Does it refer to initializing static objects (defined with static keyword)?
不,如上所述,它指的是在不执行用户定义的函数的情况下初始化对象,而是将预先计算的字节模式复制到对象的内存中。请注意,对于稍后将动态初始化的对象,这只是将内存归零。
- I also read that objects defined within block (i.e. in a function) with static keyword is initialized when the execution thread first enters the block! This means that local static objects are not initialized before main function execution. This means they are not initialized as the two steps mentioned above, right?
它们是用两步过程初始化的,尽管实际上只有第一次执行通过它们的定义。所以过程相同,但时间略有不同。
但在实践中,如果它们的初始化是静态的(即,内存模式是编译时模式)并且它们的地址未被获取,则它们可能会被优化掉。
请注意,在动态初始化的情况下,如果它们的初始化失败(应该初始化它们的函数抛出异常),将在下一次流控制通过它们的定义时重新尝试。
- Dynamic initialization refers to initialization of objects created by new operator, right? It might refer to initialization like
myClass obj = myClass(100);
ormyClass obj = foo();
根本不是,它指的是需要执行用户定义函数的初始化(注意:就 C++ 语言而言,std::string
具有用户定义的构造函数)。
编辑: 感谢 Zach 指点我,我错误地将 C++11 标准称为常量初始化的静态初始化;现在应该修复此错误。
关于c++ - 局部作用域静态变量的零初始化和静态初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17801075/
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: How to nest OR statements in JavaScript? 有没有办法做到这一点:
在 JavaScript 中有没有办法让一个变量总是等于一个变量?喜欢var1 = var2但是当var2更新,也是var1 . 例子 var var1 = document.getElementBy
我正在努力理解这代表什么 var1 = var2 == var3 我的猜测是这等同于: if (var2 == var3): var1 = var2 最佳答案 赋值 var1 = var2
这个问题已经有答案了: What does the PHP error message "Notice: Use of undefined constant" mean? (2 个回答) 已关闭 8
我在临时表中有几条记录,我想从每条记录中获取一个值并将其添加到一个变量中,例如 color | caption -------------------------------- re
如何将字符串转为变量(字符串变量--> $variable)? 或者用逗号分隔的变量列表然后转换为实际变量。 我有 2 个文件: 列名文件 行文件 我需要根据字符串匹配行文件中的整行,并根据列名文件命
我有一个我无法解决的基本 php 问题,我也想了解为什么! $upperValueCB = 10; $passNodeMatrixSource = 'CB'; $topValue= '$uppe
这可能吗? php $variable = $variable1 || $variable2? 如果 $variable1 为空则使用 $variable2 是否存在类似的东西? 最佳答案 PHP 5
在 Perl 5.20 中,for 循环似乎能够修改模块作用域的变量,但不能修改父作用域中的词法变量。 #!/usr/bin/env perl use strict; use warnings; ou
为什么这不起作用: var variable; variable = variable.concat(variable2); $('#lunk').append(variable) 我无法弄清楚这一点
根据我的理解,在32位机器上,指针的sizeof是32位(4字节),而在64位机器上,它是8字节。无论它们指向什么数据类型,它们都有固定的大小。我的计算机在 64 位上运行,但是当我打印包含 * 的大
例如: int a = 10; a += 1.5; 这运行得很完美,但是 a = a+1.5; 此作业表示类型不匹配:无法从 double 转换为 int。所以我的问题是:+= 运算符 和= 运算符
您好,我写了这个 MySQL 存储过程,但我一直收到这个语法错误 #1064 - You have an error in your SQL syntax; check the manual that
我试图在我的场景中显示特定的奖牌,这取决于你的高分是基于关卡的目标。 // Get Medal Colour if levelHighscore goalScore { sc
我必须维护相当古老的 Visual C++ 源代码的大型代码库。我发现代码如下: bIsOk = !!m_ptr->isOpen(some Parameters) bIsOk的数据类型是bool,is
我有一个从 MySQL 数据库中提取的动态产品列表。在 list 上有一个立即联系 按钮,我正在使用一个 jquery Modal 脚本,它会弹出一个表单。 我的问题是尝试将产品信息变量传递给该弹出窗
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: What is the difference between (type)value and type(va
jQuery Core Style Guidelines建议两种不同的方法来检查变量是否已定义。 全局变量:typeof variable === "undefined" 局部变量:variable
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: “Variable” Variables in Javascript? 我想肯定有一种方法可以在 JavaScrip
在语句中使用多重赋值有什么优点或缺点吗?在简单的例子中 var1 = var2 = true; 赋值是从右到左的(我相信 C# 中的所有赋值都是如此,而且可能是 Java,尽管我没有检查后者)。但是,
我是一名优秀的程序员,十分优秀!