小编Mar*_*som的帖子

如果您通过引用捕获异常,是否可以修改它并重新抛出?

标准是否有关于引用捕获的异常以及尝试修改它的情况有什么说法?

请考虑以下代码:

class my_exception: public std::logic_error
{
public:
    std::vector<std::string> callstack;
};

void MyFunc()
{
    try
    {
        SomethingThatThrows();
    }
    catch (my_exception & e)
    {
        e.callstack.push_back("MyFunc");
        throw;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个人为的例子,我实际上并没有尝试这样的事情.我只是好奇会发生什么,基于另一个线程中的建议,异常应该被const引用捕获.

c++ exception-handling exception

20
推荐指数
2
解决办法
1561
查看次数

如何将std :: pair视为两个独立的变量?

标准库中有一些函数,例如std::map::insert,返回一个std::pair.有时,将两个不同的变量填充对应于该对的一半将是方便的.有一个简单的方法吗?

std::map<int,int>::iterator it;
bool b;
magic(it, b) = mymap.insert(std::make_pair(42, 1));
Run Code Online (Sandbox Code Playgroud)

我在找magic这里.

c++ c++-standard-library

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

Unicode空格是否有Python常量?

string模块包含一个whitespace属性,该属性是一个由所有被视为空格的ASCII字符组成的字符串.是否有相应的常量也包含Unicode空格,例如不间断空格(U + 00A0)?我们可以从问题" strip()和strip(string.whitespace)给出不同的结果 ",至少strip知道额外的Unicode空白字符.

这个问题被确定为 In Python[:space:]的副本,如何列出POSIX扩展正则表达式匹配的所有字符,但该问题的答案确定了搜索空白字符以生成自己的列表的方法.这是一个耗时的过程.我的问题是关于一个常数.

c python string unicode whitespace

18
推荐指数
1
解决办法
5094
查看次数

与VC++ 6兼容的Boost的最新版本是什么?

什么是与Microsoft Visual C++ 6兼容的Boost库的最新版本?你能提供直接下载的链接吗?

http://www.boost.org上的 "下载"链接仅提供版本1.36.0的下载,该版本的文档列出了Visual C++ 7.1作为Microsoft编译器测试的最低版本.他们是否清除旧版本的下载?

c++ boost visual-c++-6 visual-c++

14
推荐指数
3
解决办法
4075
查看次数

将一个字符串数组作为参数传递给C中的函数

我想要一个简单的函数,它接收一个字符串并在一些解析后返回一个字符串数组.所以,这是我的功能签名:

int parse(const char *foo, char **sep_foo, int *sep_foo_qty) {
    int i;
    char *token;
    ...
    strcpy(sep_foo[i], token); /* sf here */
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后我称之为:

char sep_foo[MAX_QTY][MAX_STRING_LENGTH];
char foo[MAX_STRING_LENGTH];
int sep_foo_qty, error;

...

error = parse(foo, sep_foo, &sep_foo_qyt);

...
Run Code Online (Sandbox Code Playgroud)

这样我在编译期间会收到警告:

warning: passing argument 2 of 'parse' from incompatible pointer type
Run Code Online (Sandbox Code Playgroud)

然后在标记为/*sf的行中执行期间出现分段错误*/

我的C代码有什么问题?

提前致谢

c arrays parameters pointers segmentation-fault

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

如何混合两个ARGB像素?

如何混合两个ARGB像素?

来源:en.wikipedia.org/wiki/Alpha_compositing#mediaviewer/File:Alpha_compositing.svg

这里A是(带有Alpha的红色),B是(带有Alpha的蓝色).

puzzle graphics

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

为什么派生类不使用基类operator =(赋值运算符)?

以下是实际问题的简化版本.Base::operator=(int)代码似乎不是调用,而是生成临时Derived对象并复制它.为什么不使用基本赋值运算符,因为函数签名似乎完全匹配?这个简化的示例没有显示任何不良影响,但原始代码在析构函数中具有副作用,导致各种破坏.

#include <iostream>
using namespace std;

class Base
{
public:
   Base()
   {
      cout << "Base()\n";
   }

   Base(int)
   {
      cout << "Base(int)\n";
   }

   ~Base()
   {
      cout << "~Base()\n";
   }

   Base& operator=(int)
   {
      cout << "Base::operator=(int)\n";
      return *this;
   }
};

class Derived : public Base
{
public:
   Derived()
   {
      cout << "Derived()\n";
   }

   explicit Derived(int n) : Base(n)
   {
      cout << "Derived(int)\n";
   }

   ~Derived()
   {
      cout << "~Derived()\n";
   }
};

class Holder
{
public:
   Holder(int n)
   {
      member …
Run Code Online (Sandbox Code Playgroud)

c++ operator-overloading assignment-operator

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

你如何获得"我的文件"的确切路径?

在C++中,获取shell在Windows XP和Windows 7中称为"我的文档"的文件夹和Vista中的"文档"的文件夹的完整路径名并不太难; 请参阅获取我的文档的路径

有没有一种简单的方法在Python中执行此操作?

python windows

13
推荐指数
1
解决办法
5678
查看次数

修改就地并返回副本是否有意义?

注意:我正在标记这个Python和C++,因为我已经看到了两者中的例子,但问题是语言无关.

修改对象的函数或类方法有两种选择:直接在相关对象中修改数据,或创建新副本并在保持原始状态不变的情况下返回它.通常,您可以通过查看函数返回的内容来判断哪个是哪个.

有时,您会找到一个尝试同时执行这两项操作的函数,修改原始对象,然后返回该对象的副本或引用.有没有一种情况比只做一个或另一个提供任何优势?

我已经看到了Fluent InterfaceMethod Chaining的例子,它依赖于返回对象的引用,但这似乎是一个在上下文中应该很明显的特殊情况.

我的第一个坏例子直接来自Python文档,并说明了可变默认参数的问题.对我来说,这个例子是不现实的:如果函数修改了它的参数,那么有一个默认值是没有意义的,如果它返回一个副本,那么应该在进行任何修改之前进行复制.这个问题只存在,因为它试图同时做到这两点.

def f(a, L=[]):
    L.append(a)
    return L
Run Code Online (Sandbox Code Playgroud)

第二个例子来自CStringT::MakeUpper函数中的Microsoft C++ .文档说明了返回值:

返回字符串的副本,但全部为大写字符.

这导致人们期望原件保持不变.问题的一部分是文档有误导性,如果你看原型,你会发现它正在返回对字符串的引用.除非仔细观察,否则您不会注意到这一点,并将结果分配给新字符串进行编译而没有错误.后来出人意料.

c++ python mutable

13
推荐指数
1
解决办法
366
查看次数

不可能的一系列事件

我试图在for循环中追踪一个神秘的迭代器问题.我在迭代器中得到一个错误,operator!=这通常意味着被比较的迭代器不属于同一个容器.跟踪Microsoft的库实现,operator!=调用operator==此测试的位置:

    bool operator==(const _Myiter& _Right) const
        {   // test for iterator equality
 #if _ITERATOR_DEBUG_LEVEL == 2
        if (this->_Getcont() == 0
            || this->_Getcont() != _Right._Getcont())
            {   // report error
            _DEBUG_ERROR("list iterators incompatible");
Run Code Online (Sandbox Code Playgroud)

为了获得更多信息,我写了这个小函数来替换我!=for循环中:

template<typename iter>
bool bang_equal(const iter & left, const iter & right)
{
   static int count = 0;
   auto p1 = left._Getcont();
   auto p2 = right._Getcont();
   ATLTRACE("Iterator comparison left _Getcont()=%p right _Getcont()=%p %d\n", p1, p2, ++count);
   MemoryBarrier(); …
Run Code Online (Sandbox Code Playgroud)

c++ visual-c++

13
推荐指数
2
解决办法
644
查看次数