小编Ale*_* C.的帖子

Visual Studio 2010,Intellisense和PCH:丑陋的stdafx.h有哪些替代方案?

我最近切换到Visual Studio 2010,而Intellisense在使用boost库时不需要花半分钟时间显示,Microsoft的建议似乎使用了预编译的头文件.

除了我之前从未使用过它们(除非被Ugly ATL Wizards(TM)强迫),所以我四处寻找它们是如何工作的.

基本上,大集中stdafx.h方法似乎是完全错误的.我从不想在所有来源中包含(甚至便宜)一大堆头文件.由于我不使用Windows库(我使用C++/CLI更高级别的包装器,然后使用.NET与外界交谈),我没有"一整套不变的巨大标头".正好boost和标准的库标题分散在各处.

一个有趣的方法解决这个问题,但我无法弄清楚如何使这项工作.似乎每个源文件必须编译两次(如果我错了,请纠正我):一次使用/ Yc,一次使用/ Yu.这增加了开发人员的负担,必须手动调整构建系统.

我希望找到一些"为每个源文件自动生成一个预编译的头文件"技巧,或者至少是一些"最佳实践",但大多数人似乎都乐于将这个世界纳入其中stdafx.h.

我可以在每个源文件的基础上使用预编译头文件有哪些选项?我并不真正关心构建时间(只要它们不会飙升),我只想让intellisense 快速工作.

c++ precompiled-headers visual-studio visual-c++

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

参考崩溃?

通过尝试解决这个问题,有些事让我感到奇怪.请考虑以下代码:

template <typename T>
struct foo 
{
    foo(T const& x) : data(x) {}
    T data;
};
Run Code Online (Sandbox Code Playgroud)

似乎我可以构造一个foo<T const&>没有错误的类型的对象,假设T const& const&被理解为T const&.

这似乎也被称为参考崩溃,但我之前从未听过这个术语(参见链接问题中的评论).

这是普遍的吗?这是标准吗?

c++

17
推荐指数
2
解决办法
4457
查看次数

移动构造函数和强异常保证

只是一个简单的问题,我找不到一个好的参考,特别是关于未来C++ 0x标准的当前实现.

由于移动构造函数可以抛出,这意味着某些标准库函数无法提供强大的异常保证(例如vector<T>::resize()).

有一个建议1)使所有标准库移动构造函数"不抛出",2)在用户代码上添加编译时检查以确保例如.std::pair<std::string, MyType>定义一个nothrow移动构造函数或根本没有移动构造函数.

这个提案怎么了(特别是关于这个问题)?问题如何在最终草案中"解决"?

最重要的是,当我使用最近的GCC或MSVC 10时,它对我意味着什么?标准库的那些实现是否提供了例如的强例外保证.std::vector<MyTypeWithAThrowingMoveConstructor>::resize()

编辑:我没有看到这个明显相关的问题.如果对我的问题是重复的事实达成共识,那就关闭它.但是,我对实施的内容非常感兴趣,而不是讨论的内容.

c++ exception c++11

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

我在哪里可以找到C#中的机器epsilon?

机器epsilon被规范地定义为添加到一个的最小数字,给出不同于一个的结果.

有一个Double.Epsilon但名称非常具有误导性:它是可表示的最小(非规范化)Double值,因此对任何类型的数字编程都是无用的.

我想获得该类型的真正 epsilon Double,以便不必将容差硬编码到我的程序中.我该怎么做呢 ?

.net c# numerical-methods

15
推荐指数
2
解决办法
4807
查看次数

const_iterator和const_iterator :: value_type的constness

为何选择STL

std::iterator_traits<const T*>::value_type
Run Code Online (Sandbox Code Playgroud)

与...的类型相同

std::iterator_traits<T*>::value_type
Run Code Online (Sandbox Code Playgroud)

为什么它的设计是这样的?首先不应该是const T而第二个是T吗?你应该如何采用底层const正确类型的迭代器?我知道你可以编写自己的模板类和专业化并从中获取

    std::iterator_traits<const T*>::pointer
Run Code Online (Sandbox Code Playgroud)

但不应该有一个成员typedef持有它吗?

c++ iterator const-iterator iterator-traits

14
推荐指数
2
解决办法
1613
查看次数

私有基类和多重继承

考虑:

struct A { int x;};
struct B : A {};
struct C : private A {};
Run Code Online (Sandbox Code Playgroud)

现在,正如预期的那样,代码

struct D : C
{
    D () { C::x = 2; }
};

int main () { D d; }
Run Code Online (Sandbox Code Playgroud)

不编译:

test2.cc: In constructor ‘D::D()’:
test2.cc:1:16: error: ‘int A::x’ is inaccessible
test2.cc:7:12: error: within this context
Run Code Online (Sandbox Code Playgroud)

现在,如果我这样做

struct D : B, C
{
    D () { C::x = 2; }
};

int main () { D d; }
Run Code Online (Sandbox Code Playgroud)

然后错误就消失了!是不是也不A::x应该无法访问?这里有什么解释?

我正在使用 …

c++

14
推荐指数
1
解决办法
838
查看次数

要返回std :: move(x)还是不?

std::vector<double> foo ()
{
    std::vector<double> t;
    ...

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

std::vector<double> foo ()
{
    std::vector<double> t;
    ...

    return std::move (t);
}
Run Code Online (Sandbox Code Playgroud)

相当于?

更确切地说,return x总是相当于return std::move (x)

c++ move-semantics

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

从C调用的C++共享库

我有一个用C++编写的共享库.它导出一个可见的界面,extern "C"该界面由创建,破坏和操纵不透明类型的函数组成.

现在,我想要一个使用这个库的纯C程序.

我可以这样做(平台独立)吗?如果main没有用C++编写,C++ 运行时和C++静态对象什么时候会被初始化?

c c++ portability shared-libraries

11
推荐指数
1
解决办法
753
查看次数

什么是我用COM互操作得到的`Object [*]`类型?

我做C#excel互操作.我从C#调用宏,我期待对象的数组.我能够从返回二维数组的宏中获取二维对象数组.

但是,其他(第三方)宏应该返回一维数组.我无法得到(object[])xlApp.Run(...)工作(它抛出一个异常),调试器中的类型信息表示结果是类型Object[*].来自异常的实际消息是

Unable to cast object of type 'System.Object[*]' to type 'System.Object[]'.
Run Code Online (Sandbox Code Playgroud)

这是什么Object[*]类型,如何从中检索一维数组?

编辑:我想到这可能意味着SAFEARRAY的VARIANTS.但随后出现了两个问题:为什么二维数组一切正常?如何将SAFEARRAY转换为C#数组?

c# com-interop

10
推荐指数
1
解决办法
2702
查看次数

帮我选择合适的Scheme实现

考虑到分散在整个互联网上的有关该主题的系统性过时内容,这似乎真的太多了.

我根本无法找到可用的Scheme实现的无噪声和最新列表(除了那里,但我已经享受了一个丰富的功能总结表)所以我问社区而不是尝试几十种语言的实现我还没掌握.帮助我享受这种神奇的语言.

要求:

  • 免费(如发言)
  • 轻量级:没有超出标准的不必要的库,必须快速编译.比Guile轻的任何东西都可以轻量化.
  • R6RS(请不要使用巨魔,我正在学习语言,觉得有必要坚持标准)
  • 没有.NET,没有JVM
  • 应该至少在Linux上工作
  • 至少应该在x86上工作
  • 容易FFI
  • 快速实施的奖励点(太糟糕了Bigloo不支持R6RS).

我现在正在使用Ypsilon,我发现它很棒,但自2008年以来一直没有维护.Guile可以成为一个很好的竞争者,但它看起来相当沉重(和Ypsilon相比,FFI更容易).

我可能缺少一些高质量的实现,所以请随意分享您的经验.

更新感谢您的回答,我会选择Larceny,因为它提供了我正在寻找的所有内容.祝大家快乐诡计多端!

scheme

9
推荐指数
2
解决办法
1614
查看次数