你能初始化C++中的全局变量吗?如果可能的话,你可以使用什么值?你能初始化全局变量到C++中吗
回答
是的,当然你可以初始化全局变量。对于内置类型,您可以使用任何可用于赋值的值(也可以初始化不能分配的数组)。对于一个类的类型,由你决定什么类型/值将被允许(和/或要求),当你设计类。对于预定义的类,您基本上必须查阅文档以找出它允许/需要的内容。
然而,最终,它是一个全局的事实并不影响可以提供的值。作为一个全局可以影响你如何获得价值 - 特别是,当初始化完成后,你显然不能使用那些尚未提供的值。这可能会比最初看起来更微妙一点,因为保证全局变量相对于其他变量的初始化顺序很少,所以(例如)当全局变量的构造函数执行时,std::cin
,std::cout
和std::cerr
可能尚未构建,所以如果您想根据用户的输入初始化某些内容,则可能需要采取特殊步骤,以确保初始化的顺序或其他(例如)针对该特定方式使用C风格的I/O工作。
当然可以。为什么我们不能?
//global variables
int g_int = 100;
int g_float = 10.0;
int g_char = 'A';
class X
{
int value;
public:
X(int v) : value(v){}
};
X g_x1(10); //initialize with argument 10
X g_x2 = X(198); //with arg 198
int main()
{
}
允许值取决于变量的类型。对于int
,0或42都可以。对于string
,“hello world”有效。初始化全局变量与初始化其他变量相同,因此您可以使用很多自由度。
通常最好保持简单;如果你需要一个复杂的全局初始化器,那么这个变量可能会出错,但如果需要的话,你可以做很多事情。
这样做的,在其最基本的语法是:
int global_Int = 42;
string global_String = "Hello World";
但是,如果这是在插头来实现(因为全局在共同的头部一般声明),你会得到重复的声明和错误。为了解决这个问题,使用extern关键字来声明它们,然后初始化代码文件:
标题:
extern int global_Int;
extern string global_String;
代码:
#include "header.hpp"
int global_Int = 42;
string global_String = "Hello World";
然后就包括你的头每当你需要使用变量。您还可以根据需要添加其他关键字(例如,如果您需要const全局变量)。
可能是相当多的东西,如构造函数的调用:
static const std::string boo("42");
不过要小心 - 这些main()
前运行,但它们的顺序是不确定的(见"static initialization order fiasco")。
- 1. C++初始化全局变量
- 2. 全局变量初始化优化
- 3. 初始化常量和全局变量
- 4. 声明和初始化全局变量
- 5. 使用PHP初始化全局变量
- 6. Perl未初始化的全局变量
- 7. 全局变量初始化查询
- 8. 全局变量未初始化nodejs
- 9. 在Obj中初始化全局变量C
- 10. 初始化全局常量变量是否安全?定义?
- 11. 全局变量的C++初始化顺序
- 12. 当C++全局变量未被显式初始化时警告?
- 13. 我可以使用全局变量初始化一个类变量吗? (ruby)
- 14. 初始化全局变量存储器布局
- 15. 不能初始化变量
- 16. C#初始化变量
- 17. C#:初始化类变量
- 18. 用不同的方法初始化变量/对象与全局初始化
- 19. 初始化后未初始化的全局变量的位置在哪里?
- 20. 全局变量始终初始化为零
- 21. 什么时候全局静态常量变量被初始化?
- 22. 全局初始化变量在Swift UIView XIB中更改为'nil'?
- 23. Python中的全局变量,初始化和终止
- 24. 实际初始化的未初始化的局部变量?
- 25. C++ Arduino如何在方法中初始化任何未初始化的全局变量?
- 26. 局部变量保持未初始化
- 27. TensorFlow:何时初始化局部变量
- 28. 局部变量初始化的Java
- 29. 未初始化的局部变量!
- 30. 初始化线程局部变量
为什么不给我们你的代码不能? – 2011-05-01 03:38:12