小编Pra*_*han的帖子

使用clang更快地完成代码完成

我正在研究使用clang的代码完成机制时潜在的代码完成速度.下面描述的流程是我在rtags中发现的Anders Bakken.

翻译单元由守护程序监视文件进行解析以进行更改.这是通过被调用的clang_parseTranslationUnit和相关的函数(reparse*,dispose*)来完成的.当用户在源文件中的给定行和列请求完成时,守护程序将缓存的转换单元传递给源文件的最后保存版本和当前源文件clang_codeCompleteAt.(Clang CodeComplete docs).

传递给clang_parseTranslationUnit(来自CompletionThread :: process,第271行)的标志是CXTranslationUnit_PrecompiledPreamble|CXTranslationUnit_CacheCompletionResults|CXTranslationUnit_SkipFunctionBodes.传递给clang_codeCompleteAt(来自CompletionThread :: process,第305行)的标志是CXCodeComplete_IncludeMacros|CXCodeComplete_IncludeCodePatterns.

调用clang_codeCompleteAt非常慢 - 即使在完成位置是合法成员访问代码的情况下,也需要大约3-5秒来获得完成,这是文档中提到的预期用例的子集clang_codeCompleteAt.IDE代码完成标准似乎太慢了.有没有办法加速这个?

c++ llvm clang code-completion libclang

108
推荐指数
2
解决办法
4637
查看次数

noexcept,堆栈展开和性能

以下来自Scott Meyers的新C++ 11书中的草稿(第2页,第7-21行)

展开调用堆栈和可能展开调用堆栈之间的区别对代码生成产生了惊人的巨大影响.在noexcept功能,优化不需要保持运行栈在unwindable状态,如有异常会向外传播的功能,也不是他们必须确保在noexcept函数对象在施工相反的顺序应该例外离开此功能被破坏.结果是更多的优化机会,不仅在noexcept函数的主体内,而且在调用函数的站点.这种灵活性仅适用于noexcept功能.具有"throw()"异常规范的函数缺少它,没有异常规范的函数也没有.

相比之下,部分5.4"关于C++的性能技术报告"描述了"代码"和实施异常处理的"表"的方式.特别是,当没有抛出异常并且只有空间开销时,"table"方法被显示没有时间开销.

我的问题是这个 - 斯科特迈尔斯在谈论解散和可能解散的时候谈到了什么优化?为什么这些优化不适用throw()?他的评论是否仅适用于2006 TR中提到的"代码"方法?

c++ exception-handling noexcept c++11

43
推荐指数
3
解决办法
4805
查看次数

std :: uninitialized_copy和std :: copy之间的区别?

应该使用哪个std::uninitialized_copy和什么时候有什么区别std::copy

c++ memory

33
推荐指数
1
解决办法
4066
查看次数

澄清肖恩父母的讲话"继承是邪恶的基础"

Sean Parent的讲话,继承是邪恶的基类,他说多态不是这种类型的属性,而是它的使用方式.作为一个拇指规则,不要使用继承来实现接口.这样做的许多好处之一是具有虚函数的类的虚拟化只是因为它们实现了一个接口.这是一个例子:

class Drawable
{
public:
virtual void draw() = 0;
};

class DrawA : public Drawable
{
public:
void draw() override{//do something}
};

class UseDrawable
{
public:
void do(){mDraw->draw();}
Drawable* mDraw;
};
Run Code Online (Sandbox Code Playgroud)

在这里,而不是UseDrawable要求mDraw是一个Drawable*,你可以有它使用一种擦除类能够包裹实施了一个名为成员的任何类draw.所以,boost::type_erasure::any具有适当定义的东西.这样,DrawA不需要继承Drawable- 多态性是真正UseDrawable的要求,而不是真正的属性DrawA.

我试图按照这个原则重构一些代码.我有一个抽象类ModelInterface和两个具体的类ModelAModelB继承自ModelInterface.继肖恩的建议,这是有道理的不给力ModelA,并ModelB进入继承层次结构和简单的使用类型擦除在需要满足通过建模的概念类的位置ModelInterface.

现在,我的问题是我的代码中当前使用的大多数地方ModelInterface也是通过基于运行时配置文件构造适当的对象来实现的.目前,工厂将new适当的对象并返回一个ModelInterface*.如果我重构代码以boost::type_erasure::any<implement ModelInterface>在代码中的这些位置使用类型擦除的概念(例如类似的东西),我如何在运行时构造这样的对象?将 …

c++ inheritance factory type-erasure c++11

15
推荐指数
1
解决办法
4941
查看次数

listizer初始化和initializer_list构造函数的重载失败失败

以下内容无法编译clang35 -std=c++11:

#include <iostream>
#include <string>
#include <initializer_list>

class A
{
 public:
  A(int, bool) { std::cout << __PRETTY_FUNCTION__ << std::endl; }
  A(int, double) { std::cout << __PRETTY_FUNCTION__ << std::endl; }
  A(std::initializer_list<int>) { std::cout << __PRETTY_FUNCTION__ << std::endl; }
};

int main()
{
  A a1 = {1, 1.0};
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

有错误

init.cpp:15:14: error: type 'double' cannot be narrowed to 'int' in initializer list [-Wc++11-narrowing]
  A a1 = {1, 1.0};
             ^~~
init.cpp:15:14: note: insert an explicit cast to silence …
Run Code Online (Sandbox Code Playgroud)

c++ overload-resolution c++11 list-initialization

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

vector :: clear in libc ++ for trvially destructible types

请问vector<T, std::allocator<T>>::clear()O(1),如果T是平凡破坏?

gcc在bits/stl_vector.hcalls std::_Destroy(bits/stl_construct.h)中的实现.这种实现方式可以优化T通过标记调度来简单地破坏的情况std::is_trivially_destructible<T>.

通过llvm(3.5.0)实现,vector::clear调用std::allocator<T>::destroy每个元素,然后调用析构函数.

 _LIBCPP_INLINE_VISIBILITY void destroy(pointer __p) {__p->~_Tp();}
Run Code Online (Sandbox Code Playgroud)

这最终会vector::clear() O(1)在libc ++中进行优化吗?

c++ llvm clang stdvector c++11

9
推荐指数
1
解决办法
784
查看次数

如何删除github上贡献的存储库?

我分叉了一个项目,拉动并推动.我的github帐户显示了这个:

在此输入图像描述

有没有办法从我的个人资料中删除它?

我已经从设置页面中删除了存储库.

github

7
推荐指数
1
解决办法
8274
查看次数

间歇性谷歌地图api授权错误

今天我们在浏览器上看到谷歌地图api出现间歇性错误.

Google已禁止将此地图用于此应用程序.提供的密钥不是有效的Google API密钥,也不是Google Maps API密钥的授权,或者未获得此网站上Google Maps Javascript API V3的授权.

在开发人员控制台上,启用了所有地图apis.

  • 此外,"Google Maps JavaScript API v3"的使用情况远低于每天25k的免费请求.
  • 它显示所有请求的100%成功率
  • 图表上的每秒平均请求数为0.025.

我不确定是什么原因导致google maps api抛出此错误.

我们正在使用v3 api显示地图:

script.src = 'https://maps.google.com/maps/api/js?v=3&key='+mapKey+'&language=en-IN&sensor=true&libraries=places&callback=loadInfoBox';
Run Code Online (Sandbox Code Playgroud)

有没有办法知道错误的实际原因是什么?

google-maps google-maps-api-3

7
推荐指数
1
解决办法
608
查看次数

检查type是否可以作为boost :: lexical_cast <string>的参数

我有以下traits class(IsLexCastable)来检查是否可以通过调用将类型转换为字符串boost::lexical_cast<string>.它错误地返回truevector<int>.

#include <iostream>
#include <string>
#include <type_traits>
#include <utility>
#include <vector>

#include <boost/lexical_cast.hpp>

using namespace std;
using namespace boost;

namespace std
{
/// Adding to std since these are going to be part of it in C++14.
template <bool B, typename T = void>
using enable_if_t = typename std::enable_if<B, T>::type;
}

template <typename T, typename = void>
struct IsLexCastable : std::false_type
{
};

template <typename T>
struct IsLexCastable<T, std::enable_if_t<std::is_same<std::string, decltype(boost::lexical_cast<std::string>(std::declval<T>()))>::value> > …
Run Code Online (Sandbox Code Playgroud)

c++ templates boost template-meta-programming c++11

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

防止“less -R”跨换行重置颜色

我如何less通过-R或以其他方式告诉不要跨换行符(\n)重置颜色?这是我所看到的一个例子:

$ echo -e '\033[31mThis is red.\nStill red.\n\033[0mBack now.' >> coltest
$ cat coltest
This is red. #Colour is red
Still red.   #Colour is red
Back now.    #Colour is the terminal's foreground colour.
$ less -RF coltest
This is red. #Colour is red
Still red.   #Colour is the terminal's foreground colour.
Back now.    #Colour is the terminal's foreground colour.
Run Code Online (Sandbox Code Playgroud)

为什么Still red.在输出中重置为终端的前景色的颜色less -RF

bash colors ansi-colors

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