C++ “什么是”呢;“成员初始值设定人”;在C++;11?
我遇到了一个奇怪的概念,叫做“成员初始值设定项” 说: C++11添加了成员初始值设定项和应用于成员的表达式 如果构造函数没有初始化成员本身,则在类范围内 它的定义是什么C++ “什么是”呢;“成员初始值设定人”;在C++;11?,c++,class,c++11,member-initialization,C++,Class,C++11,Member Initialization,我遇到了一个奇怪的概念,叫做“成员初始值设定项” 说: C++11添加了成员初始值设定项和应用于成员的表达式 如果构造函数没有初始化成员本身,则在类范围内 它的定义是什么 有一些例子来说明它的用法吗?它可能指的是类内成员初始值设定项。这允许您在声明时初始化非静态数据成员: struct Foo { explicit Foo(int i) : i(i) {} // x is initialized to 3.1416 int i = 42; double x = 3.1416; };
有一些例子来说明它的用法吗?它可能指的是类内成员初始值设定项。这允许您在声明时初始化非静态数据成员:
struct Foo
{
explicit Foo(int i) : i(i) {} // x is initialized to 3.1416
int i = 42;
double x = 3.1416;
};
更多信息,请参见。C++11允许非静态成员初始化,如下所示:
class C
{
int a = 2; /* This was not possible in pre-C++11 */
int b;
public:
C(): b(5){}
};
现在可以在类中添加初始值设定项,这些初始值设定项是为构造函数共享的:
class A
{
int i = 42;
int j = 1764;
public:
A() {} // i will be 42, j will be 1764
A( int i ) : i(i) {} // j will be 1764
};
它避免了在构造函数中重复初始值设定项,对于大型类来说,这是一个真正的胜利。来自:-
非静态数据成员初始值设定项是一种非常简单的新方法
特色。事实上,GCC BugZIa揭示了新手C++用户经常尝试
在C++98中使用它时,语法是非法的!必须说
同样的特性也可以在java中使用,因此将它添加到C++中。
使用两种语言的人生活更轻松
结构A
{
int m;
A():m(7){}
};
结构B
{
int m=7;//非静态数据成员初始值设定项
};
因此,守则:
A A;
B B;
std::cout成员初始值设定项是指可以在类定义中设置的初始值设定项的扩展。例如,您可以使用
struct foo
{
std::string bar = "hello";
std::string baz{"world"};
foo() {} // sets bar to "hello" and baz to "world"
foo(std::string const& b): bar(b) {} // sets bar to b and baz to "world"
};
如果成员初始值设定项列表未给出另一个值,则将
bar
初始化为hello
。注意,成员初始值设定项不限于内置类型。您也可以在成员初始值设定项列表中使用统一的初始化语法。单击此处的“C++11”链接,搜索“成员i”、…,利润?我想知道我可以使int a=2;int b代码>在private:
中,而不是public
@BlackMamba它已经在private中了。只有构造函数是公共的。对不起,我弄错了。因为默认的访问标识符是private
。
struct foo
{
std::string bar = "hello";
std::string baz{"world"};
foo() {} // sets bar to "hello" and baz to "world"
foo(std::string const& b): bar(b) {} // sets bar to b and baz to "world"
};