Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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++和面向对象编程中尝试着做一些小步骤。我遇到了以下语法,我不能完全理解它——为什么定义变量时在这里有参数_C++_Oop - Fatal编程技术网

定义过程中变量的参数 我是一个C程序员,在C++和面向对象编程中尝试着做一些小步骤。我遇到了以下语法,我不能完全理解它——为什么定义变量时在这里有参数

定义过程中变量的参数 我是一个C程序员,在C++和面向对象编程中尝试着做一些小步骤。我遇到了以下语法,我不能完全理解它——为什么定义变量时在这里有参数,c++,oop,C++,Oop,unique_ptr myvar(新整数) 我知道unique\u ptr将原始指针作为其构造函数的参数,但这种语法的基本原理是什么?这是C++98之后引入的语法吗 编辑: 我发现特别令人困惑的是,在新变量名后面紧跟着一个括号。对我来说,函数就是这样声明的。起初我认为代码声明了一个名为myvar的函数,但我知道这可能是错误的 这与类似于C或C++98的语法有何不同?这种语法有名字吗

unique_ptr myvar(新整数)

我知道
unique\u ptr
将原始指针作为其构造函数的参数,但这种语法的基本原理是什么?这是C++98之后引入的语法吗

编辑:

我发现特别令人困惑的是,在新变量名后面紧跟着一个括号。对我来说,函数就是这样声明的。起初我认为代码声明了一个名为
myvar
的函数,但我知道这可能是错误的


这与类似于C或C++98的语法有何不同?这种语法有名字吗
int a(1); // a == 1
这种语法的基本原理是什么

我不知道,但如果非要我猜的话,那是因为它看起来像是给构造器打电话



1:看起来像。实际上,你不能调用构造函数。

不,这个语法一直是C++的一部分。它用于初始化对象。一个简单的例子:

int a(1); // a == 1
这种语法的基本原理是什么

我不知道,但如果非要我猜的话,那是因为它看起来像是给构造器打电话



1:看起来像。您实际上不能调用构造函数。

这些参数会传递给类的构造函数。构造函数可以接受多个参数。您还将使用什么其他语法?这种语法在C++98之前就开始使用了,C++11标准中引入了
unique\ptr
,如果你是说这个
,那么你在找我-函数就是这样声明的。这给人们和编译人员都造成了很大的困惑。有关一个极端的示例,请参阅。@user4581301谢谢您的链接。现在,这些参数被传递给类的构造函数,变得更有意义了。构造函数可以接受多个参数。您还将使用什么其他语法?这种语法在C++98之前就开始使用了,C++11标准中引入了
unique\ptr
,如果你是说这个
,那么你在找我-函数就是这样声明的。这给人们和编译人员都造成了很大的困惑。有关一个极端的示例,请参阅。@user4581301谢谢您的链接。现在开始变得更有意义了谢谢你的回复。那么
newint
只是设置变量的初始值?在这种情况下,您可以使用多行重写它吗?像
intx=5可以重写为
intx;x=5。还是比这更微妙?@tomol是的,你可以想象这样,但是对于类类型,没有初始值。这是更微妙的。例如,在您的情况下不能这样做,但是如果您使用另一个类型为unique_ptr的对象初始化了unique_ptr,那么它就可以工作了。这完全取决于类的赋值运算符。@tomol的区别在于,在第一种情况下,对象是用给定的初始值设定项构造和初始化的。在第二种情况下,对象被构造并默认初始化(如果是类类型的对象,则通过调用默认构造函数,如果是进程范围的对象,则通过零初始化,或者保留未确定的值)。完成任务后。谢谢你的回复。那么
newint
只是设置变量的初始值?在这种情况下,您可以使用多行重写它吗?像
intx=5可以重写为
intx;x=5。还是比这更微妙?@tomol是的,你可以想象这样,但是对于类类型,没有初始值。这是更微妙的。例如,在您的情况下不能这样做,但是如果您使用另一个类型为unique_ptr的对象初始化了unique_ptr,那么它就可以工作了。这完全取决于类的赋值运算符。@tomol的区别在于,在第一种情况下,对象是用给定的初始值设定项构造和初始化的。在第二种情况下,对象被构造并默认初始化(如果是类类型的对象,则通过调用默认构造函数,如果是进程范围的对象,则通过零初始化,或者保留未确定的值)。完成该任务后。