Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ “什么是”呢;“成员初始值设定人”;在C++;11?_C++_Class_C++11_Member Initialization - Fatal编程技术网

C++ “什么是”呢;“成员初始值设定人”;在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; };

我遇到了一个奇怪的概念,叫做“成员初始值设定项”

说:

C++11添加了成员初始值设定项和应用于成员的表达式 如果构造函数没有初始化成员本身,则在类范围内

它的定义是什么


有一些例子来说明它的用法吗?

它可能指的是类内成员初始值设定项。这允许您在声明时初始化非静态数据成员:

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"
};