有谁知道为什么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表达式的原因是什么?
期待您的帮助!
程
任何人都知道如何在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子句有这么慢的特殊原因吗?
程
我正在使用ubuntu.有些进程经常在我的服务器上进行操作,即使是"ls"命令也需要1秒才能执行.我想找出哪个过程如此重要,是否有任何好的命令或工具?
谢谢.
我正在阅读一些关于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++中使用匿名类作为返回类型?
我用谷歌搜索这可行:
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) 这实际上是一个面试问题,我无法弄清楚答案.谁知道这件事?您可以谈论任何差异,例如,推入堆栈的数据.
我在64位linux下使用c ++,编译器(g ++)也是64位.当我打印某个变量的地址,例如一个整数时,它应该打印一个64位整数,但实际上它打印一个48位整数.
int i;
cout << &i << endl;
output: 0x7fff44a09a7c
Run Code Online (Sandbox Code Playgroud)
我想知道其他两个字节在哪里.期待你的帮助.
谢谢.
我对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类型?
无论如何在JVM崩溃时生成核心/堆转储文件?由于这些文件通常非常有助于找出代码中的错误.任何帮助表示赞赏.
程
例如,给定日期为"2016-12-31",n为2,预期输出为"2016-12-29".
我调查date命令并且从当前日期开始n天很容易:
date -d "2 days ago" +%Y-%m-%d