#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++关于变量初始化的琐记的更多相关文章

  1. Java类变量和成员变量初始化过程

    一.类的初始化 对于类的初始化:类的初始化一般只初始化一次,类的初始化主要是初始化静态成员变量. 类的编译决定了类的初始化过程. 编译器生成的class文件主要对定义在源文件中的类进行了如下的更改: ...

  2. Java 类的实例变量初始化的过程 静态块、非静态块、构造函数的加载顺序

    先看一道Java面试题: public class Baset { private String baseName = "base"; // 构造方法 public Baset() ...

  3. Go - 变量初始化 及 注意事项

    Go变量 初始化 对 复合类型(数组.切片.字典.结构体)变量的初始化是,有一些语法限制: 1.初始化表达式必须包含类型标签: 2.左花括号必须在类型尾部,不能另起一行: 3.多个成员初始值以逗号分隔 ...

  4. C++变量初始化问题

    初始化和赋值的区别 在C++中,变量初始化和赋值操作符是两个完全不同的概念. 初始化不是赋值,初始化的含义是创建变量分配存储空间时为其赋一个初始值,而赋值的含义是把内存空间的当前值擦除,用一个新值代替 ...

  5. 调整static变量初始化顺序的一个办法

    // wrap the LaunchDir variable in a function to work around static/global initialization order stati ...

  6. java对象中继承和变量初始化顺序浅析

    先上例子代码 public class F { int age = 5; public F() { print(); } public void print() { System.out.printl ...

  7. c++ 类与函数中static变量初始化问题(转)

    首先static变量只有一次初始化,不管在类中还是在函数中..有这样一个函数: void Foo() { ; // initialize std::cout << a; a++; } 里的 ...

  8. C++builder XE10 终于支持类内变量初始化了

    Win32终于支持类内变量初始化了,C++11 用bcc32C编译器  llvm CLang.还支持Unicode 中文汉字 变量名. 用经典的bcc32编译还是不支持! class TPerson ...

  9. uboot环境变量初始化

    一.环境变量概述 1.环境变量的概念 可以理解为用户对软件的全局配置信息,这部分信息应该可以从永久性存储器上读取,能被查询,能被修改. 启动过程中,应该首先把环境变量读取到合适的内存区域,然后利用环境 ...

随机推荐

  1. 应用Fiddler对手机应用来抓包

    Fiddler是一款非常流行并且实用的http抓包工具,它的原理是在本机开启了一个http的代理服务器,然后它会转发所有的http请求和响应,因此,它比一般的firebug或者是chrome自带的抓包 ...

  2. main函数的参数:argc和argv

    程序一般是从main函数开始执行的,main函数标准格式: int main(int argc,char **argv) 其中argc是来自shell(或CMD)的参数的个数,argv是char型的二 ...

  3. Prism 4 文档 ---第5章 实现MVVM模式

        MVVM模式有助于清楚的区分应用程序界面的业务层和展现层.保持一个清晰的应用程序逻辑和UI分离有助于处理开发和设计过程中大量的问题,同时,使得应用程序的测试,维护,和扩展更加容易.MVVM也可 ...

  4. bzoj2929

    题解: 网络流裸题 代码: #include<cstdio> #include<cstring> #include<algorithm> #include<c ...

  5. hdu 6092 Rikka with Subset(逆向01背包+思维)

    Rikka with Subset Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  6. operator[],识别读操作和写操作

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  7. GreenPlum的Primary和Mirro切换恢复

    gp节点出现了acting as primary change tracking错误,判断是节点primary和mirror发生了切换 1.没有配置gp的日志,无法获取为什么切换了,待会儿看看默认日志 ...

  8. wma wmv asf格式分析

    原文链接:http://blog.csdn.net/werocpp/article/details/5594067 原文链接:http://blog.chinaunix.net/uid-2075819 ...

  9. StringUtils.isEmpty和StringUtils.isBlank的区别

    两个方法都是判断字符是否为空的.前者是要求没有任何字符,即str==null 或 str.length()==0:后者要求是空白字符,即无意义字符.其实isBlank判断的空字符是包括了isEmpty ...

  10. Android 和 Dagger 2 中的依赖注入

    原文:Dependency Injection in Android with Dagger 2 作者:Joe Howard 译者:kmyhy 在现代开发团队中到处充斥着"你一定要用依赖注入 ...