小编Nav*_*een的帖子

打破std :: for_each循环

使用std :: for_each算法时如何在满足某个条件时中断?

c++ stl

26
推荐指数
5
解决办法
2万
查看次数

禁止创建临时对象

在多线程应用程序中调试崩溃时,我终于在此语句中找到了问题:

CSingleLock(&m_criticalSection, TRUE);
Run Code Online (Sandbox Code Playgroud)

请注意,它正在创建一个CSingleLock类的未命名对象,因此在此语句之后,临界区对象会立即解锁.这显然不是编码员想要的.此错误是由简单的输入错误引起的.我的问题是,有些我可以防止在编译时自己创建类的临时对象,即上面的代码类型应该生成编译器错误.一般来说,我认为每当一个类尝试进行某种资源获取时,就不应该允许该类的临时对象.有没有办法强制执行呢?

c++ mfc temporary

26
推荐指数
2
解决办法
2419
查看次数

new int [10]()是否有效c ++?

在尝试回答这个问题时,我发现代码int* p = new int[10]();编译好VC9编译器并将整数初始化为0.所以我的问题是:

  1. 首先是这个有效的C++还是微软的扩展?
  2. 是否可以保证初始化数组的所有元素?
  3. 此外,有没有任何区别,如果我做的new int;还是new int();?后者是否保证初始化变量?

c++ arrays constructor initialization

26
推荐指数
1
解决办法
4509
查看次数

什么时候使用C++ 11*_until超时函数而不是相应的*_for函数?

在C++ 11中,*_until仅当使用稳定时钟(即,仅以不变速率向前移动的时钟)时,超时功能才"按预期"运行.因为system_clock不是一个稳定的时钟,这意味着像这样的代码可以表现得非常惊人:

using namespace std::chrono;
std::this_thread::sleep_until(system_clock::now() + seconds(10));
Run Code Online (Sandbox Code Playgroud)

除非在睡眠期间调整系统时钟,例如夏令时,否则这将导致当前线程休眠10秒.如果在休眠期间将时钟设置为一小时,则当前线程将休眠一小时10秒.

据我所知,*_untilC++ 11中的每个超时函数都有一个相应的*_for函数,它需要一个持续时间而不是一个时间点.例如,上面的代码可以重写如下:

using namespace std::chrono;
std::this_thread::sleep_for(seconds(10));
Run Code Online (Sandbox Code Playgroud)

这些*_for函数不应该担心在函数执行时调整的时钟,因为它们只是说等待多长时间,而不是等待时间应该是什么时间.

此问题不仅影响睡眠功能,对于future和try_lock函数的基于超时的等待也是如此.

我可以设想使用*_until具有不稳定时钟的功能的唯一情况是,当您想要考虑时钟调整时,例如,您想要睡到下周三凌晨3:30,即使有变化从现在到现在之间的夏令时间.还有其他情况下*_until功能比*_for功能更有意义吗?如果没有,是否安全地说,一般来说,*_for超时功能应优先于*_until功能?

c++ timeout c++11

22
推荐指数
1
解决办法
3873
查看次数

如何获取放在MFC对话框中的控件的大小和位置?

我已经通过函数获得了控件的指针

CWnd* CWnd::GetDlgItem(int ITEM_ID)
Run Code Online (Sandbox Code Playgroud)

所以我有CWnd*指向控件的指针,但是在CWnd类中找不到任何能够检索给定控件的大小和位置的方法.有帮助吗?

c++ mfc

21
推荐指数
2
解决办法
6万
查看次数

虚函数如何在C#和Java中工作?

虚拟函数如何在C#和Java中工作?

它是否使用与C++类似的相同vtable和vpointer概念,还是完全不同的东西?

c# java virtual vtable

20
推荐指数
3
解决办法
3万
查看次数

比较wstring与忽略大小写

我相信以前会被问到但是找不到它.是否有任何内置(即使用std :: wstring的方法或算法)方式对两个wstring对象进行不区分大小写的比较?

c++ string unicode stl

19
推荐指数
3
解决办法
3万
查看次数

编译器是否优化了值传递的函数参数?

假设我有一个函数,其中参数通过值而不是const-reference传递.此外,假设在函数内部仅使用该值,即函数不会尝试修改它.在这种情况下,编译器是否能够确定它可以通过const-reference传递值(出于性能原因)并相应地生成代码?是否有任何编译器可以做到这一点?

c++ compiler-construction optimization

19
推荐指数
2
解决办法
3222
查看次数

使用静态变量和模板

我有一个像这样的头文件中定义的模板类.这里我也定义了一个静态变量:

#ifndef TEST1_H_
#define TEST1_H_

void f1();

static int count;

template <class T>
class MyClass
{
public:

    void f()
    {
        ++count;
    }


};

#endif
Run Code Online (Sandbox Code Playgroud)

我已经在不同的cpp文件中定义了main()函数,如下所示:

int main(int argc, char* argv[])
{
    MyClass<int> a;
    a.f();
    f1();

    cout<<"Main:" << count << "\n";

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在不同的cpp文件中实现了函数f1(),如下所示:

void f1()
{
    MyClass<int> a;
    a.f();

    cout<<"F1: " <<count <<"\n";
}
Run Code Online (Sandbox Code Playgroud)

当我用VC6编译它时,输出为"F1:0 Main:2".这怎么可能?另外,一般情况下,如果我想将静态变量与模板一起使用,我应该如何处理?

c++ static templates visual-c++-6

18
推荐指数
1
解决办法
2万
查看次数

C++中的堆栈损坏

在C++中,堆栈可能以哪种方式被破坏.我猜测的一种方法是通过访问超出其边界的数组来覆盖堆栈变量.有没有其他方式可以被破坏?

c++ stack corruption

18
推荐指数
6
解决办法
3万
查看次数