小编Bil*_*eal的帖子

如何将一个std :: shared_ptr投降?

考虑:

struct SomethingThatsABase
{
    virtual bool IsChildOne() const { return false; }
    virtual bool IsChildTwo() const { return false; }
};

struct ChildOne : public SomethingThatsABase
{
    virtual bool IsChildOne() const { return true; }
};

struct ChildTwo : public SomethingThatsABase
{
    virtual bool IsChildTwo() const { return true; }
};

void SomeClientExpectingAChildOne(std::shared_ptr<ChildOne> const& ptrOne)
{
    //Does stuff
}

void SomeClient(std::shared_ptr<SomethingThatsABase> const& ptr)
{
    if (ptr->IsChildOne())
    {
        SomeClientExpectingAChildOne(ptr); //Oops.
        //Hmm.. can't static_cast here, because we need a `shared_ptr` out of …
Run Code Online (Sandbox Code Playgroud)

c++ shared-ptr downcast c++11

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

没有预处理步骤,Qt有多可用?

我认为库需要使用特殊工具预处理源代码是不合理的.也就是说,有几个人向我推荐了Qt库,用于跨平台GUI开发.

没有预处理步骤,Qt有多可用?

编辑:好的人,我不是把这个问题视为对Qt的抨击 - 太多的Qt粉丝正在对待它,好像它是.我不想讨论Qt提出这个预处理工具的优点.我理解为什么这个工具在那里,我理解为什么Qt设计的大部分都建立在预处理的基础之上.

我从来没有使用过Qt,因此我无法扯掉它.但我宁愿自己写一些少量的样板,而不是依赖于撕掉我的整个构建过程.出于同样的原因,我不会在我当前的项目中使用Flex和Bison; 如果我不使用这些工具,我绝对不会使用其他类型的预处理.

所以,请不要把我当作Qt翻录.我不能评论它有多好或多不好; 我没用过它.我只是想知道是否可以不使用它moc.

c++ qt

60
推荐指数
3
解决办法
8158
查看次数

命名函数优先于JavaScript中的匿名函数吗?

可能重复:
JavaScript:var functionName = function(){} vs function functionName(){}

在Javascript中提取函数有两种可能的方法:

var foo = function() { ... }
Run Code Online (Sandbox Code Playgroud)

这有点人为; 另一个常见的模式是:

var foo = {
   baz: 43,
   doSomething: function() {
       // ...
   }
}
Run Code Online (Sandbox Code Playgroud)

function foo() { 
  // ... 
}
Run Code Online (Sandbox Code Playgroud)

是否有明确的理由偏好一个或另一个?

javascript

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

IOStream库有哪些严重的替代方案?(除了cstdio)

我正在寻找一个类似于iostreams的库,它执行转换,并允许写入内存缓冲区,文件和控制台.但是,我喜欢安全的东西,就像iostream一样.有没有严肃的图书馆这样做?

能够指定事物的输出编码将是一个加号.

请注意,我不感兴趣,在图书馆它只是前iostreams的,因为他们只是增加更多的复杂性到什么iostreams的在做,例如boost::format.

PreEmptive注释响应:我不想使用cstdio,因为使用该系统不可能使代码与输出位置无关.也就是说,您必须调用一个函数将事物发送到缓冲区,并且您必须调用另一个函数来将事物发送到文件,而另一个函数则用于控制台等.

编辑2:回应下面的一系列评论:我厌倦了iostreams和cstdio.这里有更具体的原因.我试图让我的"咆哮"脱离这个问题,但人们不断问我是不是我的摇杆,所以这是我的理由.

cstdio

  • 无法正确处理Unicode字符
  • 如果不进行手动缓冲管理,就无法写入字符串之类的内容
  • 通常需要支持非标准扩展(例如vsnprintf)才能使用(编辑:好的,C99的C99标准库现在增加了大部分/全部)
  • 无法在不更改原始代码的情况下更改输出的位置(例如在glibc中的非标准扩展允许您将文件指针视为缓冲区,这样做...但它仍然只是一个非标准扩展)
  • 使安全"有趣"(整个章节专门用于解释问题的安全文档,例如"printf"的格式字符串等)
  • 不安全

输入输出流

  • 对客户来说完全太复杂了.如果你只使用标准库附带的东西,它很棒,但尝试扩展的东西几乎是不可能的.我阅读了整本"标准C++ IOStreams和Locales"一书 - 这本专题中唯一一本看似可用的书 - 两次 - 我仍然不知道发生了什么.

我喜欢iostreams的概念,即使是operator<<某些人似乎不喜欢的用途,但它似乎完全过于设计我.为了成为图书馆的简单客户,有人不应该花费无数个小时阅读书籍.当然,如果你要添加一个新的输出源或类似我能理解的东西,但......客户应该避免这种复杂性.(这不是图书馆的用途吗?)

这是C++中唯一令人痛苦的事情,它在其他编程语言中"正常工作",我认为没有理由变得复杂.

c++ iostream

46
推荐指数
3
解决办法
6343
查看次数

无锁算法真的比锁定完全算法表现更好吗?

Raymond Chen一直在做一个关于无算法大型 系列 .除了函数的简单情况之外,似乎所有这些的主流模式是它们实现自己的锁.当然,没有处理器锁,但是在每个CPU上反复循环以确保一致性的概念非常类似于自旋锁.作为一个自旋锁,它们的效率将低于操作系统附带的一般锁,因为它们在等待其他线程时不会控制其量子.因此,每当有人来找我并说"但我的算法是无锁的"时,我的一般反应是"如此"? InterlockedXxx

我很好奇 - 是否有可用的基准测试显示无锁算法比其完全锁定的算法有优势?

multithreading synchronization lock-free

45
推荐指数
5
解决办法
9064
查看次数

size_t vs int警告

对于以下类型的代码,我总是得到以下警告.

std::vector v;
for ( int i = 0; i < v.size(); i++) {
}
Run Code Online (Sandbox Code Playgroud)

warning C4267: 'initializing' : conversion from 'size_t' to 'int', possible loss of data

我明白size()返回size_t,只是想知道是否可以安全地忽略此警告,或者我应该创建所有类型的循环变量size_t

c++ stl visual-c++

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

为什么使用预编译头(C/C++)?

快速提问 - 为什么要使用预编译标题?

编辑:阅读回复,我怀疑我一直在做的事情有点愚蠢:

#pragma once

// Defines used for production versions

#ifndef PRODUCTION
#define eMsg(x) (x) // Show error messages
#define eAsciiMsg(x) (x)
#else
#define eMsg(x) (L"") // Don't show error messages
#define eAsciiMsg(x) ("")
#endif // PRODUCTION

#include "targetver.h"
#include "version.h"

// Enable "unsafe", but much faster string functions
#define _CRT_SECURE_NO_WARNINGS
#define _SCL_SECURE_NO_WARNINGS

// Standard includes
#include <stdio.h>
#include <tchar.h>
#include <iostream>
#include <direct.h>
#include <cstring>
#ifdef _DEBUG
#include <cstdlib>
#endif

// Standard Template Library
#include <bitset>
#include …
Run Code Online (Sandbox Code Playgroud)

c++ precompiled-headers

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

MVC(模型 - 视图 - 控制器) - 可以用简单的术语解释吗?

我需要向非技术经理解释MVC(模型 - 视图 - 控制器)概念并遇到麻烦.问题是解释需要在"你的奶奶会得到它"的水平上 - 例如,即使在MVC Wiki页面上提供的相当直接的解释也不起作用,至少在我的评论中.

有没有人用简单的术语来提及一个好的MVC解释?

理想情况下,非技术隐喻的例子(例如类似于"装饰模式就像眼镜")也是如此 - 我失败的一个原因是我能想到的所有MVC例子都与开发相关.

我曾经看过一个模式解释列表但是我记忆中的MVC并没有.

谢谢!

model-view-controller design-patterns

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

呼叫-retainCount被认为是有害的

或者,为什么retainCount我的暑假没有使用

这篇文章的目的是征求关于臭名昭着的方法的原因和原因的详细报道retainCount,以巩固围绕SO的相关信息.*

  1. 基础知识:不使用的官方理由是什么retainCount?是否有过任何情况下当它可能是有用的?应该做些什么?**随意编辑.

  2. 历史/解释:如果不打算使用Apple,为什么Apple在NSObject协议中提供此方法?Apple的代码是否依赖于retainCount某些目的?如果是这样,为什么不把它隐藏在某个地方?

  3. 为了更深入地理解:对象可能具有与用户代码假设不同的保留计数的原因是什么?您能否举例说明框架代码可能会使用哪些标准程序导致这种差异?是否有任何已知的情况,保留计数总是与新用户可能期望的不同?

  4. 你认为还有什么值得关注的retainCount吗?


*不熟悉Objective-C和Cocoa的编码人员经常努力解决或至少误解参考计数方案.教程解释可能提及保留计数,这(根据这些解释)当你打电话上去一个retain,alloc,copy由一个当你调用等,向下release(并在当你调用未来的某一时刻autorelease).

因此,一个崭露头角的可可黑客克里斯可以很容易地认识到,检查一个对象的保留计数对于解决一些内存问题是有用的,而且,有一种方法可用于每个被调用的对象retainCount!克里斯打电话retainCount给几个对象,这个对象太高了,而且这个对象太低了,到底发生了什么?!因此,Kris在SO上发帖,"我的记忆管理出了什么问题?" 然后一群<bold>,<large>字母下降说"不要那样做!你不能依靠结果.",这是好的,但我们的强悍编码器可能需要更深入的解释.

我希望这会变成一个常见问题解答,一个很好的信息论文/讲座的页面,我们的任何专家都倾向于写一个,当他们想知道时可以指出新的可可头retainCount.

**我不想让它过于宽泛,但是经验或有关验证/调试保留和释放配对的文档的具体提示可能适合此处.

***在虚拟代码中; 很明显,一般公众无法访问Apple的实际代码.

cocoa reference-counting objective-c retaincount

38
推荐指数
1
解决办法
5787
查看次数

在C或C++中,我应该针对NULL/nullptr检查指针参数吗?

这个问题的灵感来自于这个答案.

我一直都认为当调用者做一些愚蠢的事情时,被调用者永远不会负责,比如传递无效参数.我得出这个结论有几个原因,但也许最重要的一个来自这篇文章:

未定义的所有内容都是未定义的.

如果一个函数没有在它的文档中说它有效通过nullptr,那么你最好不要传递nullptr给那个函数.我不认为被叫方有责任处理这类事情.

但是,我知道会有一些人不同意我的看法.我很好奇我是否应该检查这些东西,以及为什么.

c c++ null

37
推荐指数
5
解决办法
7291
查看次数