#include <iostream>
using namespace std;
class T1
{
const int t = 100;
public:
T1()
{
cout << "T1 constructor: " << t << endl;
}
};
Run Code Online (Sandbox Code Playgroud)
当我尝试t用100. 初始化const成员变量时,但是它给了我以下错误:
test.cpp:21: error: ISO C++ forbids initialization of member ‘t’
test.cpp:21: error: making ‘t’ static
Run Code Online (Sandbox Code Playgroud)
如何初始化const值?
Din*_*kur 105
该const变量指定变量是否为可修改的或没有.每次引用变量时,将使用分配的常量值.在程序执行期间,不能修改分配的值.
Bjarne Stroustrup的解释简要总结了一下:
类通常在头文件中声明,并且头文件通常包含在许多翻译单元中.但是,为避免复杂的链接器规则,C++要求每个对象都有唯一的定义.如果C++允许将需要作为对象存储在内存中的实体的类内定义,则该规则将被破坏.
一个const变量要在类中声明,但它不能在它被定义.我们需要在类外定义const变量.
T1() : t( 100 ){}
Run Code Online (Sandbox Code Playgroud)
这里的赋值t = 100发生在初始化列表中,远在类初始化之前.
Fre*_*son 46
好吧,你可以做到static:
static const int t = 100;
Run Code Online (Sandbox Code Playgroud)
或者您可以使用成员初始化程序:
T1() : t(100)
{
// Other constructor stuff here
}
Run Code Online (Sandbox Code Playgroud)
小智 28
有几种方法可以初始化类中的const成员..
const成员的定义一般来说,也需要变量的初始化..
1)在类中,如果要初始化const,语法就是这样
static const int a = 10; //at declaration
Run Code Online (Sandbox Code Playgroud)
2)第二种方式可以
class A
{
static const int a; //declaration
};
const int A::a = 10; //defining the static member outside the class
Run Code Online (Sandbox Code Playgroud)
3)如果你不想在声明中初始化,那么另一种方法是通过构造函数,变量需要在初始化列表中初始化(而不是在构造函数的主体中).它必须是这样的
class A
{
const int b;
A(int c) : b(c) {} //const member initialized in initialization list
};
Run Code Online (Sandbox Code Playgroud)
bor*_*sbn 12
您可以升级编译器以支持C++ 11,您的代码将完美运行.
在构造函数中使用初始化列表.
T1() : t( 100 )
{
}
Run Code Online (Sandbox Code Playgroud)小智 9
如果您不想使const类中的数据成员成为静态,则可以const使用类的构造函数初始化数据成员.例如:
class Example{
const int x;
public:
Example(int n);
};
Example::Example(int n):x(n){
}
Run Code Online (Sandbox Code Playgroud)
如果类中有多个const数据成员,则可以使用以下语法初始化成员:
Example::Example(int n, int z):x(n),someOtherConstVariable(z){}
Run Code Online (Sandbox Code Playgroud)
小智 5
另一个解决方案是
class T1
{
enum
{
t = 100
};
public:
T1();
};
Run Code Online (Sandbox Code Playgroud)
所以t初始化为100,它不能被改变,它是私有的.