小编Ara*_*raK的帖子

我无法理解这一行 - 解除引用私有成员变量的地址或者什么?

我刚问了一个关于访问STL适配器的底层容器的问题.我得到了一个非常有用的答案:

template <class T, class S, class C>
    S& Container(priority_queue<T, S, C>& q) {
        struct HackedQueue : private priority_queue<T, S, C> {
            static S& Container(priority_queue<T, S, C>& q) {
                return q.*&HackedQueue::c;
            }
        };
    return HackedQueue::Container(q);
}

int main()
{
    priority_queue<SomeClass> pq;
    vector<SomeClass> &tasks = Container(pq);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我无法理解这一行:

return q.*&HackedQueue::c;
Run Code Online (Sandbox Code Playgroud)

这条线做什么?此外,该行怎么可以访问私有容器priority_queue传递给函数Container

c++ stl

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

你有没有写过没有守卫的头球?

我想知道为什么C++编译器不会自动为标头生成标头保护?

// Why do I have to write this for every .hpp file I create?!!
#ifndef myheader_hpp__
#define myheader_hpp__
// ...
#endif
Run Code Online (Sandbox Code Playgroud)

我没有遇到我写标题时不需要它们的情况.我看不出相反行为的真实用例,但我很高兴看到一个.有技术难题还是只是历史?!

c++ standards header header-files

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

可以使用C++原始指针实现GC吗?

我想知道如何使用C++全功能指针算法实现垃圾收集器.此外,在像Java这样的语言中,我无法为引用分配文字地址.在C++中它非常灵活.

我相信C#有两个,但C#中的不安全指针又是程序员的责任.

EITD ::伙计们,我问C++指针'他们目前'是否可以在理论上得到GC?

c++ garbage-collection pointers

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

插件背后的基本理念是什么?

你把它称为插件,插件以后与原始软件连接的代码,这真的没关系.我很想了解它们是如何工作的,必须对如何设计插件系统进行简单的解释.不幸的是,我从来没有理解过,在我的脑海里仍然存在许多悬而未决的问题.例如,程序如何找到插件?它是如何与它接口的?什么时候软件最好有插件系统?


感谢所有有用的答案.看来我问过于开放的问题,幸运的是我找到了关键词.我喜欢David回答虽然我不是Java人,但他的谈话对我有意义:)

plugins

6
推荐指数
2
解决办法
347
查看次数

在这种情况下,有人可以解释"参考"和"指针"之间的区别吗?

当我读到这个问题的litb回答时,我了解到通过引用传递数组允许我们获得它的大小.我只是玩了一点代码,并尝试通过引用传递一个"函数",并且令人惊讶地(至少对我来说),这段代码编译:

void execute( void (&func)() ) // func is passed by reference!
{
    func();
}
Run Code Online (Sandbox Code Playgroud)

最后一个函数和这个函数之间有什么区别:

void execute( void (*func)() ) // func is passed by pointer!
{
    func();
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用VC2008,它在每种情况下产生不同的输出.奇怪的是,在函数指针的情况下,编译器会更好地优化代码:

void print()
{
    std::cout << "Hello References!";
}
void execute( void (&func)() ) // optimized
{
    func();
}
int main()
{
    00291020  call   print (291000h)
}
=========================================
// In this case, the compiler removes all function calls in the code!
void print() // optimized!
{
    std::cout << …
Run Code Online (Sandbox Code Playgroud)

c++ pointers reference

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

常规语言的定义

我已经尝试并烧毁了我的大脑,以理解离散数学中的常规语言及其应用(罗森)的定义,但没有达到理解为什么定义与本书中的定义相同的目标.在页面(789),我正在改写定义:

类型3语法定义为:

w1 --> w2
Run Code Online (Sandbox Code Playgroud)

其中w1是非终端,w2的形式如下:

w2 = aB
w2 = a
Run Code Online (Sandbox Code Playgroud)

其中B是非终端,a是终端.一个特例是当w1是起始符号而w2是lambda(空字符串)时:

w1 = S
S --> lambda
Run Code Online (Sandbox Code Playgroud)

我无法找到两个问题的答案.首先,为什么w2不能成为Ba的形式.其次,为什么拉姆达只允许起始符号.该书指出,常规语言相当于有限状态自动机,我们可以很容易地看到我们可以为这两种情况构建FSA.我查看了其他资源,这些资源中不存在这些限制.

regex grammar computer-science regular-language

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

如何在C++中写一个"if if else if .."?

我只是在学习C++中的元编程基础知识,我觉得很高兴看到其他人如何解决以下问题.另外,看到使用Boost元编程库的解决方案会非常好,因为我认为它们对我来说是一个黑暗的角落.所以问题是,这可以更优雅地重写吗?

假设我们有以下结构:

template <std::size_t size>
struct type_factory
{
  typedef typename type_factory_impl<size>::type type;
};
Run Code Online (Sandbox Code Playgroud)

这个结构应该是typedef type,取决于的值size.type_factory_impl是实施type_factory.用于确定的算法type是:

if(size % bits<unsigned long long>::value == 0)
  typedef unsigned long long type;
else if(size % bits<unsigned long>::value == 0)
  typedef unsigned long type;
else if(size % bits<unsigned int>::value == 0)
  typedef unsigned int type;
else if(size % bits<unsigned short int>::value == 0)
  typedef unsigned short int type;
else if(size % bits<unsigned char>::value == 0)
  typedef …
Run Code Online (Sandbox Code Playgroud)

c++ boost if-statement metaprogramming c++11

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

此代码是否会产生未定义的行为,或者它只是未指定的行为?

可以说我们有两个编译单元如下:

// a.cpp
extern int value2;
int value1 = value2 + 10;

// b.cpp
extern int value1;
int value2 = value1 + 10;
Run Code Online (Sandbox Code Playgroud)

当我在VC2010上尝试它时,它首先初始化value1value2归零.不能全是value1value2动态初始化,并默认初始化不会对他们适用?

谢谢,

c++ primitive-types undefined-behavior static-order-fiasco unspecified-behavior

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

元整数平方根中的无限递归

美好的一天,

我的一个朋友正在询问将整数平方根函数转换为元函数.这是原始功能:

unsigned isqrt(unsigned value)
{
    unsigned sq = 1, dlt = 3;
    while(sq<=value)
    {
        sq  += dlt;
        dlt += 2;
    }
    return (dlt>>1) - 1;
}
Run Code Online (Sandbox Code Playgroud)

我使用了一个元版本constexpr,但他说他出于某种原因无法使用新功能:

constexpr std::size_t isqrt_impl
    (std::size_t sq, std::size_t dlt, std::size_t value){
    return sq <= value ?
        isqrt_impl(sq+dlt, dlt+2, value) : (dlt >> 1) - 1;
}

constexpr std::size_t isqrt(std::size_t value){
    return isqrt_impl(1, 3, value);
}
Run Code Online (Sandbox Code Playgroud)

所以我认为将其转换为以递归方式调用它的模板结构应该不难:

template <std::size_t value, std::size_t sq, std::size_t dlt>
struct isqrt_impl{
    static const std::size_t square_root = 
        sq <= …
Run Code Online (Sandbox Code Playgroud)

c++ recursion templates metaprogramming square-root

6
推荐指数
2
解决办法
726
查看次数

初级程序员可以用什么语言为它实现翻译?

我的大学即将开始,但我想在剩下的几周内做点什么:)

上学期我上了一门课程programming languages,我想把我的知识变为现实.有什么简单的,优雅的语言可以在初级程序员实施一个解释?

我不介意语言是非常小还是实验性的.

interpreter programming-languages

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