小编Mic*_*val的帖子

如何在编译时测试libstdc ++的版本,而不是GCC?

我试图在版本4.9.0之前使用GCC分发的版本中测试libstdc++因为std::regex已实现但很大程度上已破坏的版本libstdc++.

注意:

有没有可靠的方法来测试它的版本libstdc++不依赖于使用GCC我的编译器?

c++ gcc clang libstdc++

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

通过重新解释强制转换创建无效引用

我试图确定以下代码是否调用未定义的行为:

#include <iostream>

class A;

void f(A& f)
{
  char* x = reinterpret_cast<char*>(&f);
  for (int i = 0; i < 5; ++i)
    std::cout << x[i];
}

int main(int argc, char** argue)
{
  A* a = reinterpret_cast<A*>(new char[5])
  f(*a);
}
Run Code Online (Sandbox Code Playgroud)

我的理解是,reinterpret_casts to和from char*是兼容的,因为标准允许别名charunsigned char指针(强调我的):

如果程序试图通过不同于以下类型之一的左值访问对象的存储值,则行为未定义:

  • 对象的动态类型,
  • 一个cv限定版本的动态类型的对象,
  • 与对象的动态类型对应的有符号或无符号类型的类型,
  • 一种类型,是有符号或无符号类型,对应于对象动态类型的cv限定版本,
  • 一种聚合或联合类型,包括其成员中的上述类型之一(包括递归地,子聚合或包含联合的成员),
  • 一个类型,它是对象动态类型的(可能是cv限定的)基类类型,
  • a charunsigned char类型.

但是,我不确定是否f(*a)通过创建A&对无效指针的引用来调用未定义的行为.决定因素似乎是"尝试访问"措辞意味着在C++标准的背景下.

我的直觉是,这并不能构成一个访问,由于访问都需要A进行定义(现声明,但在这个例子中没有定义).不幸的是,我在C++标准中找不到"访问"的具体定义:

是否f(*a)调用未定义的行为?什么构成C++标准中的"访问"? …

c++ standards strict-aliasing language-lawyer reinterpret-cast

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

使用 libtooling 获取完全限定的模板模板参数名称

我正在尝试使用模板模板参数libtooling来打印CXXRecordDecl模板类的实例化。不幸的是,模板模板参数的字符串表示不是完全限定的(例如,它缺少命名空间)。

我正在CXXRecordDecl使用以下代码打印:

clang::PrintingPolicy policy = compiler_instance->getLangOpts();
std::string name = decl->getTypeForDecl()->getCanonicalTypeInternal().getAsString(policy);
Run Code Online (Sandbox Code Playgroud)

这是一个示例,我希望输出为ns::A<ns::B>,但我得到ns::A<B>

clang::PrintingPolicy policy = compiler_instance->getLangOpts();
std::string name = decl->getTypeForDecl()->getCanonicalTypeInternal().getAsString(policy);
Run Code Online (Sandbox Code Playgroud)

如何使用模板模板参数打印类的完全限定名称?

在相关说明中,有没有办法在不调用 的情况下做到这一点getCanonicalTypeInternal,这听起来像是一个内部函数?

[编辑 #1]我也试过decl->getQualifiedNameAsString(),它完全省略了模板参数和输出ns::A

[编辑#2] Cling 用一组问题交换另一组问题。它确实为模板模板参数正确生成了完全限定的类型。但是,它会为函数(和函数指针)的参数和返回类型生成非限定名称。例如,下面的代码产生输出ns::A<void (B)>而不是ns::A<void (ns::B)>

namespace ns {

template <template <class> class T>
class A {
  T<int> x;
};

template <class T>
class B {
  T y;
};

} // namespace ns

int main(int argc, …
Run Code Online (Sandbox Code Playgroud)

c++ clang template-templates libtooling

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

Python使用urllib2启动请求时无法使用Tor检查

在阅读了StackOverflow上的其他 问题后,我得到了一段Python代码,可以通过Tor代理发出请求:

import urllib2
proxy  = urllib2.ProxyHandler({'http':'127.0.0.1:8118'})
opener = urllib2.build_opener(proxy)
print opener.open('https://check.torproject.org/').read()
Run Code Online (Sandbox Code Playgroud)

由于Tor使用TorButton在Firefox中运行良好,我希望它能在Python中正常工作.不幸的是,包含在乱七八糟的HTML中:Sorry. You are not using Tor.我不确定为什么会这样,或者如何让Tor正常工作urllib2.

python security urllib2 tor

4
推荐指数
1
解决办法
742
查看次数

实现类似自定义STL的数据结构

我已经实现并测试了数据结构,现在想让它与STL算法集合兼容.实现自定义迭代器等的指南.特别:

  • 必须支持的最小操作集是什么?(例如++,+=,==,!=?)
  • 算法是否期望这些操作的任何属性?

理想情况下,这些答案将成为实现STL兼容数据结构的更大参考的一部分,但我不确定这样的文档是否存在.

c++ stl conventions data-structures

4
推荐指数
1
解决办法
770
查看次数