小编Joh*_*ell的帖子

在std :: map和std :: unordered_map之间进行选择

现在std有一个真正的哈希映射unordered_map,为什么(或何时)我还想在它实际存在的系统上使用旧的mapover unordered_map?是否有任何我无法立即看到的明显情况?

c++ hash unordered-map map c++11

130
推荐指数
5
解决办法
9万
查看次数

是否滥用IDisposable和"使用"作为获取异常安全的"范围行为"的手段?

我经常在C++中使用的东西是让一个类通过构造函数和析构函数A处理另一个类的状态入口和退出条件,以确保如果该范围内的某些东西抛出异常,那么B将具有已知状态范围已退出.就首字母缩略词而言,这不是纯粹的RAII,但它仍然是一种既定的模式.BA

在C#中,我经常想做

class FrobbleManager
{
    ...

    private void FiddleTheFrobble()
    {
        this.Frobble.Unlock();
        Foo();                  // Can throw
        this.Frobble.Fiddle();  // Can throw
        Bar();                  // Can throw
        this.Frobble.Lock();
    }
}
Run Code Online (Sandbox Code Playgroud)

这需要像这样做

private void FiddleTheFrobble()
{
    this.Frobble.Unlock();

    try
    {            
        Foo();                  // Can throw
        this.Frobble.Fiddle();  // Can throw
        Bar();                  // Can throw
    }
    finally
    {
        this.Frobble.Lock();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我想保证退货Frobble时的状态FiddleTheFrobble.代码会更好

private void FiddleTheFrobble()
{
    using (var janitor = new FrobbleJanitor(this.Frobble))
    {            
        Foo();                  // Can throw
        this.Frobble.Fiddle();  // Can throw …
Run Code Online (Sandbox Code Playgroud)

c# exception-handling raii

107
推荐指数
6
解决办法
6151
查看次数

如果您在"我们不使用例外"阵营,那么您如何使用标准库?

注意:我不是在扮演魔鬼的拥护者或类似的东西 - 我只是真的好奇,因为我自己不在这个营地.

标准库中的大多数类型都具有可以抛出异常的变异函数(例如,如果内存分配失败)或者可以抛出异常的非变异函数(例如,超出边界的索引访问器).除此之外,许多自由函数可以抛出异常(例如operator newdynamic_cast<T&>).

你如何在"我们不使用例外"的背景下实际处理这个问题?

  • 你是否试图永远不会调用可以投掷的功能?(我无法看到它的规模如何,所以如果是这种情况,我很想知道你是如何实现这一目标的)

  • 你没事吧和标准库中投掷,你把"我们不使用异常"为"我们从来不的异常我们的代码,我们从来没有赶上从异常等的代码"?

  • 您是否通过编译器开关完全禁用异常处理?如果是这样,标准库的异常抛出部分如何工作?

  • 编辑您的构造函数,它们是否会失败,或者按照惯例使用具有专用init函数的两步构造,该函数可以在失败时返回错误代码(构造函数不能),或者您是否执行其他操作?

编辑在问题开始后1周进行了一些小的澄清......下面的评论和问题中的大部分内容都集中在为什么方面的例外与"别的东西".我的兴趣是不是在这,但是你选择做"别的东西",如何你处理标准库部件是抛出异常?

c++ error-handling exception-handling

59
推荐指数
5
解决办法
6428
查看次数

是否每个周期都会评估基于C++ 11范围的循环条件?

for(auto& entity : memoryManager.getItems()) entity->update(mFrameTime);
Run Code Online (Sandbox Code Playgroud)

如果memoryManager包含1000个项目,那么memoryManager.getItems()在循环开始时会调用1000次还是只调用一次?

编译器是否使用-O2(或-O3)运行任何优化?

(memoryManager.getItems()返回std::vector<Entity*>&)

c++ performance foreach for-loop c++11

53
推荐指数
1
解决办法
2424
查看次数

如何将IEnumerable <string>转换为逗号分隔的字符串?

假设出于调试目的,我希望快速将IEnumerable的内容转换为单行字符串,每个字符串项以逗号分隔.我可以使用foreach循环在辅助方法中完成它,但这既不好玩也不简短.可以使用Linq吗?其他一些短途的方式?

c# linq string collections ienumerable

50
推荐指数
4
解决办法
5万
查看次数

从数组0初始化奇怪的汇编

灵感来自c/c ++中初始化和归零数组的问题在我的例子中,我决定实际检查一下针对Windows Mobile Professional(ARM处理器,来自Microsoft Optimizing Compiler)的优化发布版本.我发现的有点令人惊讶,我想知道是否有人可以解释我的问题.

检查这两个例子:

byte a[10] = { 0 };

byte b[10];
memset(b, 0, sizeof(b));
Run Code Online (Sandbox Code Playgroud)

它们在同一个函数中使用,因此堆栈如下所示:

[ ] // padding byte to reach DWORD boundary
[ ] // padding byte to reach DWORD boundary
[ ] // b[9] (last element of b)
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ]
[ ] // b[0] = sp + 12 (stack pointer + 12 bytes)
[ ] …
Run Code Online (Sandbox Code Playgroud)

c c++ compiler-construction assembly

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

在C++ 11中迭代容器的推荐方法是什么?

在C++ 11中迭代容器的推荐方法是什么?

运用

container.begin() and container.end()
Run Code Online (Sandbox Code Playgroud)

要么

begin(container) and end(container)
Run Code Online (Sandbox Code Playgroud)

如果有的话,何时优先于另一个?

c++ algorithm stl c++11

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

为什么.NET JIT编译器决定不内联或优化掉没有副作用的空静态方法的调用?

我认为我正在观察.NET JIT编译器没有内联或优化对没有副作用的空静态方法的调用,考虑到一些直言不讳的在线资源,这有点令人惊讶.

我的环境是x64,Windows 8.1,.NET Framework 4.5上的Visual Studio 2013.

鉴于这个简单的测试程序(https://ideone.com/2BRCpC)

class Program
{
    static void EmptyBody()
    {
    }

    static void Main()
    {
        EmptyBody();
    }
}
Run Code Online (Sandbox Code Playgroud)

发布版本与上述程序的最优化产生以下MSIL为MainEmptyBody:

.method private hidebysig static void  Main() cil managed
{
  .entrypoint
  // Code size       6 (0x6)
  .maxstack  8
  IL_0000:  call       void Program::EmptyBody()
  IL_0005:  ret
} // end of method Program::Main

.method private hidebysig static void  EmptyBody() cil managed
{
  // Code size       1 (0x1)
  .maxstack  8
  IL_0000:  ret
} // …
Run Code Online (Sandbox Code Playgroud)

c# clr compiler-optimization

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

当锁没有争用时,锁(...)有多贵?

在查看双重检查锁定时,我看到了许多建议,只是跳过第一次检查并立即进行锁定,然后检查后再进行检查.

这让我想知道,什么时候是lock (this.padlock)"便宜"的?

c# concurrency synchronization locking

22
推荐指数
2
解决办法
1498
查看次数

为什么.Net框架没有优先级队列类?

Stack Overflow上有一些线程涉及在.Net和C#中实现优先级队列.

我的问题是一个更基本的问题:为什么在.Net框架中没有开箱即用的优先级队列?甚至C++标准库也有一个.

.net priority-queue standard-library library-design data-structures

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