C++关于变量初始化的琐记
#include <iostream>
using namespace std; class Base{
virtual void func1()
{
cout<<"func1 called"<<endl;
}
}; class Derived:public Base{ }; int main(int argc, char *argv[])
{
auto bp = new Base();
if(Derived *dp = dynamic_cast<Derived *>(bp)){
//使用dp指向的Derived对象
cout<<"branch1 dp="<<dp<<"bp"<<bp<<endl;
}
else{
//使用bp指向的Base对象
cout<<"branch2 dp="<<dp<<"bp"<<bp<<endl;
} ClassP<string>::pFunc f([](string data){
cout<<"x:"<<data<<endl;
});
}
上面这种用dynamic_cast转换指针的写法可以在运行时判断被转换的对象是否能转换 不能转换会返回一个null
然后这里的变量初始化也是可以像赋值一样返回被赋予的值作为if的判断依据 这样就形成了这种简单的连续写法
然而变量初始化和变量赋值还是有区别的,目前经常遇到的问题是在循环内部。如果在循环内部初始化一个变量 这个初始化语句只会设定一次变量值 后几次循环会略过这一条初始化。这是C++和java,c#的一个很大区别,经常造成坑。java和c#都是在循环内部初始化变量也会每次循环都设定值的。
C++关于变量初始化的琐记的更多相关文章
- Java类变量和成员变量初始化过程
一.类的初始化 对于类的初始化:类的初始化一般只初始化一次,类的初始化主要是初始化静态成员变量. 类的编译决定了类的初始化过程. 编译器生成的class文件主要对定义在源文件中的类进行了如下的更改: ...
- Java 类的实例变量初始化的过程 静态块、非静态块、构造函数的加载顺序
先看一道Java面试题: public class Baset { private String baseName = "base"; // 构造方法 public Baset() ...
- Go - 变量初始化 及 注意事项
Go变量 初始化 对 复合类型(数组.切片.字典.结构体)变量的初始化是,有一些语法限制: 1.初始化表达式必须包含类型标签: 2.左花括号必须在类型尾部,不能另起一行: 3.多个成员初始值以逗号分隔 ...
- C++变量初始化问题
初始化和赋值的区别 在C++中,变量初始化和赋值操作符是两个完全不同的概念. 初始化不是赋值,初始化的含义是创建变量分配存储空间时为其赋一个初始值,而赋值的含义是把内存空间的当前值擦除,用一个新值代替 ...
- 调整static变量初始化顺序的一个办法
// wrap the LaunchDir variable in a function to work around static/global initialization order stati ...
- java对象中继承和变量初始化顺序浅析
先上例子代码 public class F { int age = 5; public F() { print(); } public void print() { System.out.printl ...
- c++ 类与函数中static变量初始化问题(转)
首先static变量只有一次初始化,不管在类中还是在函数中..有这样一个函数: void Foo() { ; // initialize std::cout << a; a++; } 里的 ...
- C++builder XE10 终于支持类内变量初始化了
Win32终于支持类内变量初始化了,C++11 用bcc32C编译器 llvm CLang.还支持Unicode 中文汉字 变量名. 用经典的bcc32编译还是不支持! class TPerson ...
- uboot环境变量初始化
一.环境变量概述 1.环境变量的概念 可以理解为用户对软件的全局配置信息,这部分信息应该可以从永久性存储器上读取,能被查询,能被修改. 启动过程中,应该首先把环境变量读取到合适的内存区域,然后利用环境 ...
随机推荐
- Highcharts 向下钻取饼图
Highcharts 向下钻取饼图 配置 drilldown 配置 drilldown 用于向下钻取数据,通过点击某项深入到其中的具体数据. drilldown: { series: drilldow ...
- vue项目搭建 (二) axios 封装篇
vue项目搭建 (二) axios 封装篇 项目布局 vue-cli构建初始项目后,在src中进行增删修改 // 此处是模仿github上 bailicangdu 的 ├── src | ├── ap ...
- scale的空白问题
使用scale对表格进行缩放 出现大片空白问题 一直没有很好地重视这个问题,导致这次不得不面对,经过各种搜索,各种尝试,终于解决了这个留白问题 思路 大小盒子,小盒子进行缩放,大盒子依据缩放来进行动态 ...
- 转载:left join和left semi join的联系和区别
1.联系 他们都是 hive join 方式的一种,join on 属于 common join(shuffle join/reduce join),而 left semi join 则属于 map ...
- 由浅入深了解EventBus:(一)
概述 由greenrobot织贡献(该组织还贡献了greenDAO),一个Android事件发布/订阅轻量级框架; EventBus是一个消息总线,以观察者模式实现,用于简化程序的组件.线程通信,可以 ...
- bzoj3400
题解: dp f[i][j]表示前i个,膜为j 最后记得判断0 代码: #include<bits/stdc++.h> using namespace std; ; int n,m,a[N ...
- Linux下第一次Node尝试
由于需求所定,必须在服务器上使用nodejs,第一次使用过程记录下来. 首先是安装node,这里可以下载到各个版本的node:https://nodejs.org/download/ 我是进入rele ...
- linkbutton组件
可独立存在的组件. inkbutton 按钮组件 通过$.fn.linkbutton.defaults重写默认的defaults链接按钮(linkbutton)用于创建一个超链接按钮.它是一个正常的& ...
- 学会使用Fidder抓取app的http请求(转)
fidder可以抓取http请求,抓取手机app上面的,自己pc的请求也可以截取,通过这样达到类似浏览器调试的效果,更容易找到问题. 使用原文链接:http://www.cnblogs.com/syf ...
- git clone 提示输入git@xxx的密码
如下: suse:~/ecox # git clone git@vcs.in.ww-it.cn:ecox/ecox.git 正克隆到 'ecox'... git@vcs.in.ww-it.cn's p ...