社区
C++ 语言
帖子详情
std::vector做全局变量一个奇怪的问题
qiangv
2012-01-11 02:30:30
在a.cpp中定义了std::vector<SomeType> vec;
然后在a.h中用extern进行声明。
问题如下:
b.cpp中有一个类B,构造函数会往vec里加东西。
然后b.cpp的最后定义了一个变量:B* pB = new B;//这时候B的构造就会往vec里加东西,这个时候打印vec.size()会等于1;
然后进入main执行,我在main中打印vec.size竟然是0。。。。。
有人碰到过吗
...全文
632
11
打赏
收藏
std::vector做全局变量一个奇怪的问题
在a.cpp中定义了std::vector vec; 然后在a.h中用extern进行声明。 问题如下: b.cpp中有一个类B,构造函数会往vec里加东西。 然后b.cpp的最后定义了一个变量:B* pB = new B;//这时候B的构造就会往vec里加东西,这个时候打印vec.size()会等于1; 然后进入main执行,我在main中打印vec.size竟然是0。。。。。 有人碰到过吗
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qiangv
2012-01-11
打赏
举报
回复
已解决,用函数和static变量来绕过这种问题,坑爹,半天时间过去了。
结贴。
qscool1987
2012-01-11
打赏
举报
回复
对于多编译单元这个问题很重要,在effective C++里面提到过,称之为局部静态变量的初始化顺序问题
signforlin
2012-01-11
打赏
举报
回复
这个。。。。
qiangv
2012-01-11
打赏
举报
回复
问题找到了。
和全局变量的初始化顺序有关。
先初始化B,这时候vec是1,
然后初始化vec,被清零。。。
opponent2012
2012-01-11
打赏
举报
回复
[Quote=引用 5 楼 qiangv 的回复:]
我同样的代码,把vec换成int的全局变量,就不会有这个问题,诡异了。
[/Quote]
难道是因为vector是类类型?有默认构造函数?
孤舟
2012-01-11
打赏
举报
回复
请上代码
qiangv
2012-01-11
打赏
举报
回复
我同样的代码,把vec换成int的全局变量,就不会有这个问题,诡异了。
qiangv
2012-01-11
打赏
举报
回复
b只要包含a.h就好了,其实a.h是一个公用的头文件。。
如果b再定义,那不成了两个变量了。。。。
IVERS0N
2012-01-11
打赏
举报
回复
vector在b.cpp中定义了吗
qiangv
2012-01-11
打赏
举报
回复
其中B* pB = new B;这个语句的pB也是全局的,但在b.cpp中定义
关于全局
std
::
vector
和局部变量存储的总结
最近在写程序的时候,由于对
vector
机制的不了解,往全局作用域的
std
::
vector
中添加数据的时候总是束手束脚,今天抽空
做
了点实验,对
std
::
vector
有了进一步的认识,贴出来记录一下。 下面贴一些伪代码流程,程序输出结果省略,直接写结论。 //定义
一个
测试类 class testClass { public: int val; testClass(int a) { val = a; printf("hello,my point is %p,my.
全局变量
声明
首先在.h头文件中声明
全局变量
,用extern声明,声明时不能赋值。#pragma once#ifndef __BEIJING_H__#define __BEIJING_H__#include<
std
io.h>#include<string.h>#include "opencv2/core/core.hpp"extern
std
::
vector
<cv::Point&g...
【C++】5-1.11 c++11的向量类
std
::
vector
【C++】5-1.11 c++11的向量类
std
::
vector
1、
vector
类与array类2、
vector
类使用方法3、使用示例 1、
vector
类与array类 关于c++11引入的array类,参考如下博客: 【C++】4-1.25 C++11的数组类
std
::array https://blog.csdn.net/jn10010537/article/details/116669492
std
::array数组对象,它的大小在编译阶段就确定了,容量大小不可变;
std
::
vector
向量对象,它
std
::
vector
: 用法与技巧
1.介绍 这篇文章的目的是为了介绍
std
::
vector
,如何恰当地使用它们的成员函数等操作。本文中还讨论了条件函数和函数指针在迭代算法中使用,如在 remove_if()和for_each()中的使用。通过阅读这篇文章读者应该能够有效地使用
vector
容器,而且应该不会再去使用C类型的动态数组了。 2.
Vector
总览
vector
是C++标准模板库中的部分内容,它是
一个
多功能
std
::
vector
用法
vector
是C++标准模板库中的部分内容,它是
一个
多功能的,能够操作多种数据结构和算法的模板类和函数库。
vector
之所以被认为是
一个
容器,是因为它能够像容器一样存放各种类型的对象,简单地说,
vector
是
一个
能够存放任意类型的动态数组,能够增加和压缩数据。 为了可以使用
vector
,必须在你的头文件中包含下面的代码: #include
vector
属于
std
命名域的,因此需要通过命名限
C++ 语言
64,654
社区成员
250,484
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章