#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值?
我有C++代码,归结为如下所示:
class Foo{
bool bar;
bool baz;
Foo(const void*);
};
Foo::Foo(const void* ptr){
const struct my_struct* s = complex_method(ptr);
bar = calculate_bar(s);
baz = calculate_baz(s);
}
Run Code Online (Sandbox Code Playgroud)
从语义上讲,bar和baz成员变量应该是const,因为它们在初始化后不应该更改.但是,似乎为了使它们如此,我需要在初始化列表中初始化它们而不是分配它们.要清楚,我理解为什么我需要这样做.问题是,我似乎无法找到任何方法将代码转换为初始化列表而不执行以下不良操作之一:
complex_method两次电话(对性能不好)有没有办法让变量const同时避免这些不良情况?
我经常发现自己希望对象的成员变量可以是 const,但系统允许在构造后初始化该 const 变量。有没有一种机制可以让我这样做?
为了澄清这一点,这里有一个例子:
class A
{
public:
A(){}
initialize(int x) { c = x; }
private:
const int c;
}
Run Code Online (Sandbox Code Playgroud)
我希望能够做这样的事情。我在构造时没有这些信息,所以我不能简单地将初始化移动到构造函数的初始化列表中。