小编che*_*eng的帖子

为什么istream对象可以用作bool表达式?

有谁知道为什么istream对象可以用作bool表达式?例如:

ifstream input("tmp");
int iValue;
while (input >> iValue)
    //do something;
Run Code Online (Sandbox Code Playgroud)

这里input >> iValue返回对ifstream对象的引用.我想知道为什么这个对象可以用作bool表达式.
我查看ifstream类,发现这可能是由于以下成员函数:

operator void * ( ) const;
Run Code Online (Sandbox Code Playgroud)

有关此功能的详细信息,请参见此处
如果是的话,有人可以向我解释这个功能吗?该函数的原型与通常的运算符重载声明不同.这个函数的返回类型是什么?
如果不是,那么ifstream对象可以用作bool表达式的原因是什么?
期待您的帮助!

c++ operator-overloading istream

23
推荐指数
2
解决办法
4577
查看次数

Postgresql中的NOT EXISTS子句

任何人都知道如何在Postgresql中执行此类查询?

SELECT * 
FROM tabA 
WHERE NOT EXISTS (
    SELECT * 
    FROM tabB 
    WHERE tabB.id = tabA.id
)
Run Code Online (Sandbox Code Playgroud)

当我执行这样的查询时,postgresql会抱怨" ERROR: Greenplum Database does not yet support that query."

编辑:这个怎么样:

SELECT * 
FROM tabA 
WHERE NOT EXISTS (
    SELECT * 
    FROM tabB WHERE tabB.id = tabA.id AND tabB.id2 = tabA.id2
)
Run Code Online (Sandbox Code Playgroud)

编辑:
我在postgresql 8.2.15中测试了@ypercube提供的4个答案.结论是:

1)第一个在postgresql版本中不起作用,正如我上面在问题中所说的那样.也可以在那里找到错误消息.

2)对于其他三个答案,执行速度为:(3)LEFT JOIN>(4)EXCEPT >>(2)NOT IN.
具体来说,对于具有相同语法的查询,(3)LEFT JOIN大约需要5580ms,(4)EXCEPT大约需要13502ms,而(2)NOT IN需要大于100000(实际上我没有等待它完成).
NOT IN子句有这么慢的特殊原因吗?

postgresql greenplum

20
推荐指数
2
解决办法
3万
查看次数

如何找到经常做的过程?

我正在使用ubuntu.有些进程经常在我的服务器上进行操作,即使是"ls"命令也需要1秒才能执行.我想找出哪个过程如此重要,是否有任何好的命令或工具?

谢谢.

linux io command

18
推荐指数
4
解决办法
3万
查看次数

关于C++中函数定义的一个问题

我正在阅读一些关于C++中函数指针的资料,并遇到一个我不理解的函数定义.
标准函数定义具有以下形式:

type name (param...)
Run Code Online (Sandbox Code Playgroud)

但以下定义对我来说似乎有点奇怪.有谁可以向我解释一下?谢谢.

float (*GetPtr1(const char opCode)) (float, float)<br>
{
    if(opCode == '+')
        return &Plus;
    else
        return &Minus; // default if invalid operator was passed
}
Run Code Online (Sandbox Code Playgroud)


注意:Plus和Minus是param(float,float)的两个函数,并返回一个浮点数.

c c++ function-pointers

13
推荐指数
3
解决办法
415
查看次数

匿名类可以在C++中用作返回类型吗?

有没有办法在C++中使用匿名类作为返回类型?

我用谷歌搜索这可行:

struct Test {} * fun()
{
}
Run Code Online (Sandbox Code Playgroud)

但是这段代码没有编译,错误信息是:

可能无法在返回类型中定义新类型

实际上代码没有任何意义,我只是想弄清楚一个匿名类是否可以在C++中用作返回类型.

这是我的代码:

#include <typeinfo>
#include <iterator>
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdlib>

using namespace std;

int main(int argc, char **argv)
{
    int mx = [] () -> struct { int x, y ; } { return { 99, 101 } ; } ().x ;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我用g ++ xx.cpp -std = c ++ 0x编译这段代码,编译器得到:

expected primary-expression before '[' token.
Run Code Online (Sandbox Code Playgroud)

c++ anonymous-types anonymous-class

11
推荐指数
2
解决办法
2947
查看次数

调用虚函数和非虚函数之间的区别?

这实际上是一个面试问题,我无法弄清楚答案.谁知道这件事?您可以谈论任何差异,例如,推入堆栈的数据.

c++ virtual-functions function-calls

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

64位机器上的c ++指针

我在64位linux下使用c ++,编译器(g ++)也是64位.当我打印某个变量的地址,例如一个整数时,它应该打印一个64位整数,但实际上它打印一个48位整数.

int i;
cout << &i << endl;

output: 0x7fff44a09a7c
Run Code Online (Sandbox Code Playgroud)

我想知道其他两个字节在哪里.期待你的帮助.

谢谢.

c++ pointers

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

C++中的模板实例化

我对C++如何实例化模板感到困惑.我有一段代码:

template <class T, int arraySize>
void test1(T (&array)[arraySize])
{
    cout << typeid(T).name() << endl;
}

template<class T>
void test2(T &array)
{
    cout << typeid(T).name() << endl;
}

int main()
{
    int abc[5];
    test1(abc);
    test2(abc);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

以下是我的问题:
1.如何将数组abc的大小传递给test1(参数arraySize)?
2. C++编译器如何确定两个模板中的T类型?

c++ arrays templates

8
推荐指数
3
解决办法
371
查看次数

当JVM崩溃时,Sun JDK能否生成核心/堆转储文件?

无论如何在JVM崩溃时生成核心/堆转储文件?由于这些文件通常非常有助于找出代码中的错误.任何帮助表示赞赏.

java coredump jvm-crash

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

n天前从命令行上的给定日期开始

例如,给定日期为"2016-12-31",n为2,预期输出为"2016-12-29".

我调查date命令并且从当前日期开始n天很容易:
date -d "2 days ago" +%Y-%m-%d

unix linux shell gnu date

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