小编Edd*_*223的帖子

从向量中删除项目,而在C++ 11范围内'for'循环?

我有一个IInventory*的向量,我正在使用C++ 11范围循环遍历列表,以便对每个进行处理.

在做了一些东西之后,我可能想要从列表中删除它并删除对象.我知道我可以随时调用delete指针来清理它,但是在范围for循环中,从矢量中删除它的正确方法是什么?如果我从列表中删除它将使我的循环失效?

std::vector<IInventory*> inv;
inv.push_back(new Foo());
inv.push_back(new Bar());

for (IInventory* index : inv)
{
    // Do some stuff
    // OK, I decided I need to remove this object from 'inv'...
}
Run Code Online (Sandbox Code Playgroud)

c++ for-loop vector c++11

91
推荐指数
4
解决办法
6万
查看次数

如何从<chrono>获得int milli和float秒的持续时间?

我正在尝试使用计时库来定时器和持续时间.

我希望能够Duration frameStart;(从app开始)和a Duration frameDelta;(帧之间的时间)

我需要能够以frameDelta毫秒和浮点秒的形式获得持续时间.

你如何使用新的c ++ 11 <chrono>库做到这一点?我一直在努力和谷歌搜索(信息稀疏).代码是模板化的,需要特殊的演员和东西,我无法弄清楚如何正确使用这个库.

c++ timer c++11 c++-chrono

75
推荐指数
4
解决办法
12万
查看次数

如何在C++预处理器中检测g ++和MinGW?

我想做的事情如下:

#ifdef GCC
#define GetFunctionName() string("My function name is ") + __PRETTY_FUNCTION__;
#endif
Run Code Online (Sandbox Code Playgroud)

由于我想使用漂亮的PRETTY_FUNCTION,据我所知只有gnu支持所以我需要检测我是否正在编译g ++和MinGW,我该怎么做?我猜我需要知道的是编译器的预处理器定义,就像我在下面为Microsoft做的那样.

#ifdef WIN32
#define LogFuncBegin() gLogger.FuncBegin( __FUNCTION__ );
#define LogFuncEndSuccess() gLogger.FuncEndSuccess( __FUNCTION__ );
#endif
Run Code Online (Sandbox Code Playgroud)

如何在C++预处理器中检测g ++和MinGW?

c++ gnu mingw g++ c-preprocessor

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

如何在函数返回期间使用std :: string移动语义?

可能重复:
C++ 11 rvalues并且移动语义混乱

我认为是正确的

std::string GetLine()
{
std::string str;
std::getline(std::cin, str);
return std::move(str);
}
Run Code Online (Sandbox Code Playgroud)

但是在这个链接http://www.cprogramming.com/c++11/rvalue-references-and-move-semantics-in-c++11.html (检查标题部分返回一个明确的右值引用功能)

这是#1谷歌搜索命中移动语义显示类似的功能签名

int&& GetInt()
{
int x = 0;
// code here
return std::move(x);
}
Run Code Online (Sandbox Code Playgroud)

从我在其他地方读到的&&表示右值引用,所以在这种情况下它返回对不存在的对象的引用.

那是哪个呢?

(是的,我知道移动一个int没有真正的好处,但问题是在第一个函数中是否使用std :: string或std :: string &&的返回类型.如果这是应该对所有类型执行的方式.)

c++ move-semantics c++11

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

代码分析说'wWinMain'的注释不一致:这个实例没有注释

我正在写一些简单的win32内容,我正在使用以下wWinMain

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow)
Run Code Online (Sandbox Code Playgroud)

VS2012快递代码分析说

C28251函数的注释不一致:此实例有一个错误'wWinMain'的不一致注释:此实例没有注释.请参阅c:\ program files(x86)\ windows kits\8.0\include\um\winbase.h(2201).LeesSpaceShip main.cpp 6

我不清楚注释是什么.那么什么是注释?哪些部分在我的代码中出错?

谢谢.

编辑:是的,代码编译并运行得很好.

c++ winapi annotations visual-c++

17
推荐指数
1
解决办法
8359
查看次数

将函数的返回值赋给参考c ++?

这是一个两部分问题.可以将函数的返回值赋给引用吗?如

Foo FuncBar()
{
    return Foo();
}

// some where else
Foo &myFoo = FuncBar();
Run Code Online (Sandbox Code Playgroud)

这个可以吗?我的理解是FuncBar()返回一个Foo对象,现在myFoo是对它的引用.

问题的第二部分.这是优化吗?因此,如果你在一个循环中这样做很多时候做得更好

Foo &myFoo = FuncBar();
Run Code Online (Sandbox Code Playgroud)

要么

Foo myFoo = FuncBar();
Run Code Online (Sandbox Code Playgroud)

并且考虑到变量的使用,不会使用ref需要更慢的解引用?

c++ return reference

16
推荐指数
1
解决办法
8746
查看次数

转发声明枚举类不起作用

在State.h我有

enum class StateID : unsigned int;
Run Code Online (Sandbox Code Playgroud)

在State.cpp我有

enum class StateID : unsigned int
{
    NullID = 0,
    MainMenuID,
    GamePlayID,
};
Run Code Online (Sandbox Code Playgroud)

问题是任何包含的类State.h都有前向声明,但我不能enum在任何cpp文件中使用任何值,除了States.cpp(定义它),比如StateID::MainMenuID.错误说......

/home/lee/Projects/SuddenAwakening/Source/Game.cpp:24:错误:'MainMenuID'不是'StateID'的成员

我正在运行LinuxMint15KDE,g ++ 4.7,我在其他部分使用c ++ 11功能,如nullptr,unique_ptr,ect ......,所以我不会忘记c ++ 11的编译器标志.

c++ forward-declaration c++11 enum-class

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

我是否必须使用weak_ptr.lock()来测试它是否指向有效对象?

为了查看weak_ptr是否指向有效对象,创建临时shared_ptr似乎效率低下.我甚至不想访问该对象.这是因为我有一个从shared_ptr的向量返回weak_ptr的函数,如果它返回一个空的weak_ptr,那么这意味着该对象不存在该GUID.

所以我只是测试对象是否存在.

有没有另一种方法来检查weak_ptr是否为空,而不创建shared_ptr?

c++ shared-ptr weak-ptr

9
推荐指数
1
解决办法
7638
查看次数

安全使用vector.emplace_back(new MyPointer); 矢量内部的故障会导致内存泄露吗?

使用安全吗?

vector.emplace_back( new MyPointer() );
Run Code Online (Sandbox Code Playgroud)

或者,向量中抛出异常或某些失败会导致内存泄漏吗?

是否更好地执行以下某种形式,首先将指针放在临时的unique_ptr中.

vector.emplace_back( std::unique_ptr<MyPointer>( new MyPointer() ) );
Run Code Online (Sandbox Code Playgroud)

因此,如果发生向量故障,临时unique_ptr仍将清理内存?

c++ memory-leaks stdvector c++11

9
推荐指数
1
解决办法
2904
查看次数

使用命名空间来创建全局函数,但是获得多个定义的符号错误

这些函数是我的大多数程序对象将使用的实用程序类型的东西.我希望将它们放在命名空间中并使它们具有全局性.此命名空间在标头中定义,然后添加到我的预编译标头中.但是到目前为止,我已经在2个不同的对象中使用了这个命名空间中的函数,并且编译器在这两个对象上抛出了多次定义的符号错误.

命名空间文件

#ifndef UTILS_H
#define UTILS_H

#include <random>
#include <cmath>


namespace Utils
{
    extern int GetRandomBetween(int low, int high)
    {
        if (low < 0 || low >= high)
            return 0;
        int seed = high - low;

        return (rand() % seed) + low;
    }
};

#endif
Run Code Online (Sandbox Code Playgroud)

和我的precomp标题

// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//

#pragma once

#include "targetver.h"

//#define WIN32_LEAN_AND_MEAN             // Exclude …
Run Code Online (Sandbox Code Playgroud)

c++ linker-errors precompiled-headers

6
推荐指数
1
解决办法
7682
查看次数