小编Dan*_*per的帖子

虚拟继承不破坏静态组合?

我在过去5年的工作中假设虚拟继承打破了静态组合.

但是现在我发现,静态组合仍然保持不变,只有关于正确实例位置的附加信息.这是正确的吗?

c++ virtual-inheritance

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

试图在graphviz点中可视化抽象语法树,它太宽了.怎么修?

所以我正在研究一种语言,我想,主要是出于好奇,看看我是否能够可视化文件的抽象语法树.经过一番环顾,我发现了graphviz dot,转换了我的AST prettyprinter,可以输出到这种格式:

digraph G {
    main -> parse -> execute;
    main -> init;
    main -> cleanup;
    execute -> make_string;
    execute -> printf
    init -> make_string;
    main -> printf;
    execute -> compare;
}
Run Code Online (Sandbox Code Playgroud)

但我的问题是,当我跑

dot -Tpng dotf.gv -o graph.png
Run Code Online (Sandbox Code Playgroud)

在输入文件中,我最终得到一个宽度为8000像素的文件,这是不切实际的.看到这里.

我不知道是否可以修复,但如果有人可以感激我.

parsing abstract-syntax-tree graphviz

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

std :: string和std :: wstring的前向声明

经常讨论无法转发声明std :: string和std :: wstring的问题.据我所知,原因是这些类型是模板类basic_string实例化的typedefing:

namespace std {
  typedef basic_string<char>    string;
  typedef basic_string<wchar_t> wstring;
}
Run Code Online (Sandbox Code Playgroud)

语言不允许转发typedef的声明.

对于使用继承而不是typedef的c ++标准,这不是更好吗?

namespace std {
  class string : public basic_string<char> {};
  class wstring : public basic_string<wchar_t> {};
}
Run Code Online (Sandbox Code Playgroud)

那么我们可以转发声明std :: string和std :: wstring?

c++ inheritance templates stdstring forward-declaration

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

我怎样才能找到最大的四边形

在这种情况下,如何找到最大的四边形?

在附图中,您可以看到我所拥有的(在左侧)和我想要的内容(在rigth中). 在此输入图像描述

此代码不起作用,因为最大的矩形有十字而不是角.

int GameController::GetIndexOfExternalContour(vector<vector<Point>> contours)
{
    int largest_area=0;
int largest_contour_index=0;

for( int i = 0; i< contours.size(); i++ )           // iterate through each contour. 
{
    double a = contourArea(contours[i], false);     //  Find the area of contour
    if(a > largest_area)
    {
        largest_area = a;
        largest_contour_index = i;                  //Store the index of largest contour
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ opencv image-processing contour feature-detection

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

解析C++的语法结构比其他语言更难吗?

我观察到几乎在所有IDE中,Java和C#的代码完成优于C++.例如,在Netbeans中,Java自动完成远远优于C++自动完成,而在Visual Studio中,C#自动完成比Visual C++更好.

有很多IDE提供了非常好的Java自动完成功能,但C++也是如此,即使它是较旧的语言.

解析C++会更难吗?如果是这样,为什么?

c++ ide code-completion

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

当涉及路径时,如何编写与系统无关的代码?

假设我正在创建一个使用某个库的项目,并且我必须在链接时提供该库的路径。在命令行或 makefile 中,我可能有:

g++ ... -L/path/to/mylibrary
Run Code Online (Sandbox Code Playgroud)

我也会把这个项目发给其他想要使用它的人。他们系统上的路径可能不一定与我的相同。他们可能一起使用不同的文件路径。

我如何确保库的路径对我的计算机和我的项目的接收者都有效?

c++ linker makefile path

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

无法从'DerivedClass*'转换为'BaseClass*&'

我尝试以下代码,并获得编译错误.

class A {};
class B : public A {};

void f(A*& p) {}

int
main()
{
    B* pB;
    f(pB); // cannot convert argument 1 from 'B *' to 'A *&'

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

如何解决f(pB)调用f(A*&p)函数?

c++ polymorphism reference pass-by-reference upcasting

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

如何理解易失性和非易失性寄存器?

CPU寄存器可以通过调用来分类为volatile和non-volatile,word的含义如何volatile暗示分类?

cpu-registers calling-convention volatility

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

const_cast转换为左值引用不会删除constness

我想了解以下两种情况的区别.

const uint32_t v0 = 0;
const uint32_t v1 = 1;

const_cast<uint32_t&>(v0) = v1;
std::cout << v0 << std::endl;
Run Code Online (Sandbox Code Playgroud)

结果如下:

0

然而,

struct S {
    const uint32_t v0;
    S() : v0( 0U ) {}
} s;

const_cast<uint32_t&>(s.v0) = v1;
std::cout << s.v0 << std::endl;
Run Code Online (Sandbox Code Playgroud)

我明白了:

1

关于第一种情况,为什么"v0"保持为0?

提前致谢.

c++ casting const const-cast

3
推荐指数
1
解决办法
215
查看次数

ClickHouse:在用作布尔值的 Uint8 上使用 LowCardinality 字段是否有意义?

LowCardinalityClickHouse 中的字段是一种优化,其中值是字典编码的,以实现更快的查找和更小的存储。根据文档

使用 LowCarditality 数据类型的效率取决于数据的多样性。如果字典包含的不同值少于 10,000 个,则 ClickHouse 大多显示出更高的数据读取和存储效率。如果字典包含超过 100,000 个不同的值,则与使用普通数据类型相比,ClickHouse 的性能可能更差。

用作布尔值的 UInt8 值怎么样?基数是 2,但占用空间如此之小 (8),它实际上会在查询中提供使用它的好处吗?

encoding cardinality clickhouse

3
推荐指数
1
解决办法
537
查看次数