我正在掌握c ++并且有一种语言功能我特别难以理解.
我习惯于明确地声明和初始化变量,但在c ++中,我们有时似乎声明并隐式地构造变量.
例如,在这个片段中,rdev似乎是隐式构造的(因为它随后用于构造default_random_engine);
random_device rdev;
default_random_engine gen(rdev());
Run Code Online (Sandbox Code Playgroud)
有人能解释一下这里发生了什么吗?除了一个简单的声明之外,我该怎么说int myInt;呢?
有人能解释一下这里发生了什么吗?
这些是定义,而不仅仅是声明.变量定义创建变量.在第一种情况下,没有初始化,表明它应该默认初始化.
除了一个简单的声明之外,我该怎么说
int myInt;呢?
这也是一个定义,创建int变量并使其保持未初始化状态.
您可以声明一个全局变量而不定义它:
extern int myInt;
Run Code Online (Sandbox Code Playgroud)
extern表示它具有外部链接,并在其他地方定义.如果不定义其他类型的变量,则无法声明它们.
random_device rdev; // creates an instance of random_device on the stack
// with default constructor (taking no arguments)
default_random_engine gen( // creates an instance of default_random_engine
// on the stack
rdev() // passing it the result of
// invocation of operator '()'
// on the instance rdev of random_device
);
Run Code Online (Sandbox Code Playgroud)
相同的更详细的形式(与一些C++ 11):
auto rdev = random_device {};
auto gen = default_random_engine { rdev.operator()() };
Run Code Online (Sandbox Code Playgroud)
有人能解释一下这是怎么回事吗?我怎样才能将其与 int myInt; 等简单声明区分开来?
它们都是简单的定义。
唯一的区别是类型的属性。random_device需要建造,所以就是这样。int确实如此,但人们哭得太频繁了,所以事实并非如此。坦率地说,int的行为更多的是一种语言缺陷,而不是您真正想要的东西。
最终,这是类型的属性,而不是定义的属性。
| 归档时间: |
|
| 查看次数: |
625 次 |
| 最近记录: |