Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.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++ const成员是否可以用c++;承包商?_C++_Initialization_Constants - Fatal编程技术网

C++ const成员是否可以用c++;承包商?

C++ const成员是否可以用c++;承包商?,c++,initialization,constants,C++,Initialization,Constants,我读代码片段。请搜索“Const class Data members”以访问该部分。代码如下所示: class Test { const int i; public: Test (int x) { i=x; } }; int main() { Test t(10); Test s(20); } 我使用VS2013警告我它不正确。正如我所知,const成员变量只能由初始化列表初始化。例如: Test (int x):i(x){}

我读代码片段。请搜索“Const class Data members”以访问该部分。代码如下所示:

class Test
{
   const int i;
   public:
   Test (int x)
   {
     i=x;
   }
};

int main()
{
 Test t(10);
 Test s(20);
}
我使用VS2013警告我它不正确。正如我所知,const成员变量只能由初始化列表初始化。例如:

Test (int x):i(x){}
<新的C++标准更新支持它(如果是,更改听起来合理,在函数体中初始化似乎没有区别,对不对?)?或者文档出错(我认为它不会出错)。

规则没有更改(从C++98开始)

注意
i=x不是初始化,而是赋值;它们是不同的东西。对于
const
成员,它们只能是

对于无法默认初始化的成员,例如引用和常量限定类型的成员,必须指定成员初始值设定项

e、 g.
测试(intx):i(x){}

但是他们不能被分配

Test (int x)
{
  i=x;  // assignment is not allowed
  ...
  i=42; // assignment again; that makes no sense for const at all
}

是的,
const
成员只能初始化(使用初始化列表)而不能分配给,如代码段所示。不,更新的C++标准没有更新这个来支持构造函数中的赋值。
包含该代码段的相关教程是错误的。我建议不要阅读这样的教程,因为它们往往没有细微的(而不是很微妙的)错误。

第一个代码片段在任何C++标准中都是不正确的。是的,它可以被初始化。但您不是在初始化它,而是在分配给它。您应该继续本教程。构造函数初始值设定项列表将在后面解释@EdHeal我喜欢在周末编程。唱歌只是兼职。