小编ide*_*ixs的帖子

函数模板重载:const*vs. const&

当我有两个模板化的函数重载,如下所示:

template<class T>
void foo( T const& )
{
    // do something with a const reference
    cout << "const reference version";
}

template<class T>
void foo( T const* )
{
    // do something with a const pointer
    cout << "const pointer version";
}
Run Code Online (Sandbox Code Playgroud)

为什么编译器在使用非const指针类型实例化时会选择第一个版本?

int* bar;
foo( bar ); // prints "const reference version"

char const* baz;
foo( baz ); // prints "const pointer version"
Run Code Online (Sandbox Code Playgroud)

c++ templates overloading

8
推荐指数
1
解决办法
705
查看次数

无效的快速入境(免费)

我试图找到原因:

*** glibc detected *** ...: invalid fastbin entry (free): 0x00007fc384ced120 ***
Run Code Online (Sandbox Code Playgroud)

该程序转储了核心,所以我能够将其追溯到一个非常简单的类的析构函数,类似于:

class foo : public foo_base
{
    ...
    ...
    std::vector<boost::weak_ptr<bar> > vec;
}
Run Code Online (Sandbox Code Playgroud)

析构函数是虚拟的foo_base,未实现foo

向量vec仅在构造函数中指定,之后不进行修改.

glibc错误提到的地址与 vec._M_impl._M_start

  • 我在哪里可以开始寻找原因?

  • 知道什么是fastbin,它怎么会无效?

  • 这可能是一个双重自由的情况,还是glibc肯定会double free在这种情况下提出?

c++ glibc

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

C中的隐式数字类型转换

考虑这个简单的代码:

int foo = 4;
double d1 = sin (foo);
double d2 = foo * 0.1;
Run Code Online (Sandbox Code Playgroud)

当我用gcc编译它时,结果是预期的(即在数学上正确),即使sin()期望a double作为其参数.看来gcc已经隐含地foo投入了double.

这种隐式转换的可移植性如何,有哪些限制,我在哪里可以找到文档?

旁注:我知道C++编译器需要正确处理这样的转换.

c gcc casting numbers

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

Oracle SQL:在语句中多次使用先前的结果

我想实现这样的目标:

SELECT col1,col2-(SELECT foo FROM table1) 
FROM table2 
WHERE col2>(SELECT foo FROM table1)
Run Code Online (Sandbox Code Playgroud)

没有选择foo两次.

我可以使用Oracle SQL吗?它会比SELECTing两次(或多次)更有效吗?

sql oracle

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

标签 统计

c++ ×2

c ×1

casting ×1

gcc ×1

glibc ×1

numbers ×1

oracle ×1

overloading ×1

sql ×1

templates ×1