小编orl*_*rlp的帖子

splint调试解析错误

这是我第一次使用splint(来自Ubuntu存储库),我立即被WTF击中.错误消息:

nightcracker@nightcracker-pc:~/c/brainfuck$ splint brainfuck.c
Splint 3.1.2 --- 03 May 2009

brainfuck.c:17:6: Parse Error. (For help on parse errors, see splint -help
               parseerrors.)
*** Cannot continue.
Run Code Online (Sandbox Code Playgroud)

现在,显然它在第16行第6列看到了错误.让我们检查一下(发布完整代码):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

enum {
    CELL_CHUNK_SIZE = 1024,
};

typedef unsigned char cell;

int main(int argc, char *argv[]) {
    if (argc < 1) {
        fprintf(stderr, "ERROR: Not enough arguments\n");
        return 1;
    }

    FILE  *srcfile; // source file << THIS LINE APPARENTLY IS WRONG
    long srclen; // source file size
    char *bf; …
Run Code Online (Sandbox Code Playgroud)

c splint

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

获取公开Goog​​le Docs文件的下载链接

阅读Google Docs API我发现:

下载

无法以最初上载文件的格式下载文件.文件的下载URL如下所示:

https://doc-04-20-docs.googleusercontent.com/docs/secure/m7an0emtau/WJm12345/YzI2Y2ExYWVm?h=16655626&e=download&gd=true
Run Code Online (Sandbox Code Playgroud)

给定一个公开的Google文档文件网址,比如说

https://docs.google.com/open?id=0B1-vl-dPgKm_NTNhZjZkMWMtZjQxOS00MGE1LTg2MjItNGVjYzdmZjYxNmQ5
Run Code Online (Sandbox Code Playgroud)

如何将其转换为下载链接?

python api google-docs

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

可能std :: vector中的元素有抛出析构函数吗?

当我查看Containercppreference 的要求时,它列出Destructible了一个要求value_type.这似乎意味着容器元素的析构函数可能不会抛出.

我无法在C++ 14标准中找到这个要求的引用(没有查看旧版本).我能找到的唯一的事情就是value_type必须是Erasable这并不意味着有任何异常安全的.

所以我的问题是,可能在std::vector一个抛出析构函数中的元素?如果没有,标准中的哪个部分禁止它?


PS:别担心,我不打算用抛出析构函数创建类型.我只是编写一个符合标准的实现,并试图获得异常安全权.

c++ standards-compliance

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

有没有办法加快进口?

我有一个需要的CLI应用程序sympy.CLI应用程序的速度很重要 - 它在用户反馈循环中使用了很多.

但是,简单地做import sympy 一整秒.这在紧密的反馈循环中变得异常烦人.无论如何在没有更改模块的情况下再次运行脚本时"预加载"或优化模块?

python performance module

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

为什么这个构造函数重载错误地解决了?

这是我的(剥离)类和一个对象的实例化:

template <typename T, typename Allocator = std::allocator<T> >
class Carray {
    typedef typename Allocator::size_type size_type;

    // ...

    explicit Carray(size_type n, const T& value, const Allocator& alloc = Allocator()) {
        // ...
    }

    template<typename InputIterator>
    Carray(InputIterator first, InputIterator last, const Allocator& alloc = Allocator()) {
        // ...
    }

    // ...
}

Carray<int> array(5, 10);
Run Code Online (Sandbox Code Playgroud)

我希望这可以调用Carray(size_type, const T&, const Allocator&)构造函数,但事实并非如此.显然这是坚决的template<typename InputIterator> Carray(InputIterator, InputIterator, const Allocator&).

我应该改变什么来使这项工作按预期工作?我觉得它也很奇怪,因为打电话std::vector<int> v(5, 10)完全没问题.如果我在GCC的实现中查看构造函数的定义,我会发现这一点(我重命名了一些编译器实现名称,如 __n:)

template<typename T, typename A = …
Run Code Online (Sandbox Code Playgroud)

c++ constructor class overload-resolution

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

如何为我的模板类添加std :: swap?

可能重复:
如何为我的班级提供交换功能?

关于这一点存在一些问题,但是很多矛盾(A人给出了解决方案A',其中有很多人用B表示它是UB)或者"仅在编译器支持ADL时才有效".

所以,假设我有以下模板(容器)类:

template<typename T>
class C {
    // ...
    void swap(C<T>& y) throw(); // C x; x.swap(y);
}
Run Code Online (Sandbox Code Playgroud)

那么确保这个(示例)代码有效的正确方法是什么:

C<int> x, y;
std::swap(x, y);
Run Code Online (Sandbox Code Playgroud)

请给出你对C++ 03的答案,如果它仍然适用于C++ 0x,那就更好了!

c++ swap stl class

5
推荐指数
1
解决办法
1618
查看次数

堆上的对象和引用

在回答这个问题时,我有点困惑.我们都知道,由于C++拷贝语义,这很好用:

int *some_obj = new int(42);
int a_copy = *some_obj;

delete some_obj;

printf("The answer is %d\n", a_copy);
Run Code Online (Sandbox Code Playgroud)

但是这个怎么样?

int *some_obj = new int(42);
int& a_ref = *some_obj;

delete some_obj;

printf("The answer is %d\n", a_ref);
Run Code Online (Sandbox Code Playgroud)

这是访问已删除的内存吗?

可能会以各种形式多次询问,但这并不是Google友好的.天啊,我无法成为一个体面的头衔.

c++ language-lawyer

5
推荐指数
1
解决办法
72
查看次数

有没有最近的 GMP Windows 二进制发行版?

我正在寻找适用于 Windows 的 GMP 二进制版本的最近(最好是最新版本)存储库。

到目前为止,我只能找到非常过时(+ 5 年)的版本。

我自己无法编译 GMP - 编译需要太多 RAM。

windows build gmp

5
推荐指数
0
解决办法
1184
查看次数

查找覆盖给定直线简单多边形的最小矩形集

对于碰撞检测,我想使用尽可能少的矩形将位图转换为一组矩形.标题中描述了对该问题的更正式描述.一个例子:

程序员艺术

对于多种解决方案的断路器,如果所有矩形组合所覆盖的总面积最大化,我更喜欢它.例如,上图中的蓝色矩形可能会更小,但这可能是一个不太理想的解决方案.

这个问题有更常见的名称吗?有文献吗?或者是一种提供最佳解决方案的简单算法?

algorithm rectangles

5
推荐指数
1
解决办法
832
查看次数

创建异常层次结构的正确方法是什么?

我理解为了使用多重继承正确捕获异常,我需要使用虚拟继承.
我不一定主张有争议地使用多重继承,但我不想设计使其无法使用的系统.请不要分散这个问题来提倡或攻击使用多重继承.

所以假设我有以下基本异常类型:

class BaseException : public virtual std::exception {
public:
    explicit BaseException(std::string msg)
    : msg_storage(std::make_shared<std::string>(std::move(msg))) { }

    virtual const char* what() const noexcept { return msg_storage->c_str(); }

private:
    // shared_ptr to make copy constructor noexcept.
    std::shared_ptr<std::string> msg_storage;
};
Run Code Online (Sandbox Code Playgroud)

从中创建异常层次结构的正确方法是什么BaseException


我的问题在于构造异常类型.理想情况下,每个异常只构造其父级,但由于虚拟继承,这是不可能的.一种解决方案是构建链中的每个父母:

struct A : public virtual BaseException {
    explicit A(const std::string& msg) : BaseException(msg) { }
};

struct B : public virtual A {
    explicit B(const std::string& msg, int code)
    : BaseException(msg), A(msg), code_(code) { }

    virtual int …
Run Code Online (Sandbox Code Playgroud)

c++ exception hierarchy c++11

5
推荐指数
0
解决办法
217
查看次数