const成员变量的初始化详解

const 成员变量的初始化
const的成员变量只能在类的构造函数初始化,如下编译报错

//const.h#include<iostream>class cconst{public:    cconst();    void

print()    {        std::cout<<"----"<<cs<<std::endl;    }private:   

const int cs;};
//const.cpp#include"const.h"cconst::cconst(){}int main(int argc, char*

argv[]){    cconst* a = new cconst();    a->print();    return 0;}

编译报错error c2758: 'cs' : must be initialized in constructor

base/member initializer list

将const.cpp修改为:

#include"const.h"cconst::cconst(){    cs = 0;}int main(int argc, char*

argv[]){    cconst* a = new cconst();    a->print();    return 0;}

仍然报错:

error c2758: 'cs' : must be initialized in constructor base/member

initializer list

修改为下面形式后,正常:

#include"const.h"cconst::cconst():cs(0){    //cs = 0;}int main(int argc,

char* argv[]){    cconst* a = new cconst();    a->print();    return 0;}

时间: 2024-09-20 19:31:43

const成员变量的初始化详解的相关文章

Java中成员方法与成员变量访问权限详解_java

记得在一次面试的笔试题中,有的面试官会要求写出具体的像pullic这些访问限定符的作用域.其实,平常我都没去系统的考虑这些访问限定符的作用域,特别是包内包外的情况,OK,笔试不行了.  这是java基本的知识,也是公司看重的,那没办法啦,我的脑袋记不住东西,那我只能把这些东西写下来方便自己温故知新,不废话了,贴代码了. 代码如下: package com.jaovo; /** *_1_ 成员变量访问权限的求证 * public private protected default(默认的权限) *

C++成员变量的初始化顺序问题

问题来源: 由于面试题中,考官出了一道简单的程序输出结果值的题:如下,   [cpp] view plaincopyprint?   class A   {   private:       int n1;       int n2;          public:       A():n2(0),n1(n2+2){}          void Print(){           cout << "n1:" << n1 << ", n

Python中的变量和作用域详解_python

作用域介绍 python中的作用域分4种情况: L:local,局部作用域,即函数中定义的变量: E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的: G:globa,全局变量,就是模块级别定义的变量: B:built-in,系统固定模块里面的变量,比如int, bytearray等. 搜索变量的优先级顺序依次是:作用域局部>外层作用域>当前模块中的全局>python内置作用域,也就是LEGB. x = int(2.9) # int bu

IOS 关键字const 、static、extern详解_IOS

IOS 关键字const .static.extern详细介绍: 一.前言 阅读别人的代码(一些优秀的源码)总能发现一些常见的关键字,随着编程经验的积累大部分还是知道是什么意思的,但在概念上和具体的用法上却依然有些模糊,故特意整理汇总了下三个比较常见的关键字--const/static/extern. 二.关键字const/static/extern的释义和用法 1.const 这个单词翻译成中文是"常量"的意思.在程序中我们知道"常量"的值是不能变的,固定的.所以

C++中const 与 迭代器(iterator) 使用 详解

迭代器(iterator) 是一种指针类型, 也分const指针本身(地址) 和 const指针所指的值, 两种情况; 但是写法和const内置指针有所不同; char * const 相当于 const container<>::iterator; 可以修改指针所指的值, 但不能修改指针的地址; const char * 相当于 container<>::const_iterator; 可以修改指针地址, 但不能修改指针所指的值; 注意代码示例, 两种const和迭代器; 代码:

Java4Android类和对象的初始化详解

1,成员初始化 Java尽力保证:所有变量在使用前都能够恰当的初始化.  1)方法的局部变量.Java以编译时错误来贯彻这种保证.eg: void f(){ int i; i++; //Error , i not initialized }  2)类的数据成员.如果是基本类型,他们都会有一个初始值:如果是对象引用,那么这个引用将会被初始化为null. 指定初始化 如果想为某个变量赋值,该怎么做? 1)直接在定义类成员变量的地方为其赋值(注意,C++里面是不可以的,尽管C++新手们总想这么做) c

C++成员函数调用方式用法详解

前言 C++的成员函数分为静态函数.非静态函数和虚函数三种,在本系列文章中,多处提到static和non-static不影响对象占用的内存,而虚函数需要引入虚指针,所以需要调整对象的内存布局.既然已经解决了数据,函数等在内存中的布局问题,下一个需要考虑的就是如何调用,上述提到的三种函数的调用机制都不一样,其间的差异正是本篇博客需要讨论的. 非静态成员函数 C++的设计准则之一就是:非静态成员函数至少必须和一般的非成员函数有相同的效率.要达到这一点,成员函数的成员属性不会给其带来额外的负担.考虑以

Java 数组声明、创建、初始化详解_java

一维数组的声明方式: type var[]; 或type[] var; 声明数组时不能指定其长度(数组中元素的个数), Java中使用关键字new创建数组对象,格式为: 数组名 = new 数组元素的类型 [数组元素的个数] 实例: TestNew.java: 程序代码: public class TestNew { public static void main(String args[]) { int[] s ; int i ; s = new int[5] ; for(i = 0 ; i

C 语言指针变量的运算详解_C 语言

指针变量保存的是地址,本质上是一个整数,可以进行部分运算,例如加法.减法.比较等,请看下面的代码: #include <stdio.h> int main(){ int a = 10, *pa = &a, *paa = &a; double b = 99.9, *pb = &b; char c = '@', *pc = &c; //最初的值 printf("&a=%#X, pa=%#X, pb=%#X, pc=%#X\n", &