我目前正在使用Visual Studio Express C++ 2008,并且对catch块排序有一些疑问.不幸的是,我无法在互联网上找到答案,所以我向专家提出这些问题.
我注意到除非catch(...)放在catch块的末尾,否则编译将失败,错误C2311.例如,以下内容将编译:
catch (MyException)
{
}
catch (...)
{
}
Run Code Online (Sandbox Code Playgroud)
而以下不会:
catch (...)
{
}
catch (MyException)
{
}
Run Code Online (Sandbox Code Playgroud)
一个.我是否可以问这是否是在C++语言标准中定义的,或者这只是Microsoft编译器是严格的?
湾 C#和Java也有相同的规则吗?
C.另外,我还尝试创建基类和派生类,并在派生类的catch语句之前放置基类的catch语句.这编译没有问题.请不要有语言标准来防范这种做法吗?
我们有一个应用程序部署到在UNIX上运行的WebSphere服务器,我们遇到两个问题:
问题是:当系统挂起时,我们不知道它是问题1还是2.
理想情况下,我们首先要手动生成线程转储,然后等待系统恢复.如果没有,那么我们在重新启动WebSphere之前生成线程转储和堆转储.
我知道kill -3(或kill -QUIT)命令.该命令将仅生成线程转储(如果参数IBM_HEAPDUMP=false),或者线程转储和堆转储(如果IBM_HEAPDUMP=true).但是,IBM_HEAPDUMP必须在WebSphere启动之前设置,并且在WebSphere运行时无法更改.
关于IBM_HEAPDUMP参数和kill -3命令,我的理解是否正确?
此外,是否可以按照我描述的方式获取日志?(即,在生成JVM诊断时,选择是否即时生成堆转储)
这是我编写的用于测试命令行参数处理的简单脚本:
use Getopt::Long;
my $help = 0;
GetOptions(
'help|h|?' => \$help,
) or die "Error!";
print "OK\n";
Run Code Online (Sandbox Code Playgroud)
我得到的结果如下:
D:\>perl test.pl --help
OK
D:\>perl test.pl --hell
Unknown option: hell
Error! at test.pl line 10.
D:\>perl test.pl --he
OK
D:\>perl test.pl --hel
OK
Run Code Online (Sandbox Code Playgroud)
有没有人注意过这个?行为(接受他和hel而不是帮助)是一个潜在的错误吗?
我正在编写一个C++应用程序,它需要一块内存(大约1000字节)作为一些文本处理的临时缓冲区.该操作可以每秒重复多达10,000次.
任何人都可以确认每次我需要缓冲区时分配内存会更加昂贵(即带有智能指针的新内存,当超出范围时内存被释放),而不是拥有固定缓冲区并清除它(写入每个字节)它每次处理完成后都为零?
这听起来像C++的常识,但我在互联网上找不到任何确认它的东西.
具有自动垃圾收集功能的计算机语言(例如Java,.net)的情况是否不同?
我确信之前必须提出这类问题,但未能通过搜索此网站找到任何问题.如果我错过任何类似的问题,我会提前道歉.
C++中有什么东西可以进行日期操作吗?我知道SYSTEMTIME结构(它是我认为你做GetSystemTime时返回的结构),但它似乎不包含任何操作函数.例如,我正在寻找一些可以"给我2010年7月第二个星期二的日子"的东西.而且,将非系统时钟源的时间拟合到SYSTEMTIME结构中似乎是错误的.
是否有任何库例程来验证日期?我不是在考虑基本的"检查日是在1到28之间".例如,例程必须能够说29-02-2009不存在.
谢谢.
我有Eclipse Memory Analyzer v1.3.1,需要分析一些.phd堆转储。
根据这个问题,有必要在Eclipse Memory Analyzer上安装DTJF。
问题中的此链接说:内存分析器还可以从IBM系统转储和可移植堆转储(PHD)文件中读取与内存有关的信息。为此,只需将IBM DTFJ功能部件安装到Memory Analyzer版本0.8或更高版本中。请遵循IBM DTFJ功能部件安装说明。如果成功安装了DTFJ功能,则“文件”“打开堆转储”应为文件类型提供以下选项……
当我单击“安装”部分中的链接时,到达此位置,似乎是一个文件列表,其中包含一些.jar文件和1个.xml文件,但没有安装说明。
有人知道我应该做什么吗?我没有“正确”安装Eclipse Memory Analyzer v1.3.1-我只是下载了所有文件,并将它们放在C:\ Users(我的用户名)\ Documents \ Software \ MemoryAnalyzer-1.3.1.20140107-win32.win32.x86 \ mat下并通常通过双击文件MemoryAnalyzer.exe来运行它。在安装DTFJ之前我需要做些什么吗?
我想将一个项目的主干复制到另一个项目,所以我使用以下命令:
svn copy -m"test"(项目的url)/ Trunk /(项目的url)/ Trunk /
文件最终(项目的url)/ Trunk/Trunk /而不是(项目的url)/ Trunk /我希望它们去的地方.
我做错了什么吗?如果我想要将文件放入(项目的网址)/ Trunk /,我该怎么办?执行以下操作似乎没有意义:
svn copy -m"test"(项目的url)/ Trunk /(项目的url)/
请注意,我在这里看到过类似的查询,但认为我的查询不同,值得单独提问.
假设有一个包含以下表的数据库:
现在假设我想找到订购了10种以上不同类型产品的所有客户的名称,以及他们订购的产品类型的数量.同一产品的多个订单不计算在内.
我认为下面的查询应该有效,但有以下问题:
以下是我的查询
select T1.customer_name, T1.customer_ID, T2.number_of_products_ordered
from customer_table T1
inner join
(
select cust.customer_ID as customer_identity, count(distinct ord.product_ID) as number_of_products_ordered
from customer_table cust
inner join order_table ord on cust.customer_ID=ord.customer_ID
group by ord.customer_ID, ord.product_ID
having count(distinct ord.product_ID) > 10
) T2
on T1.customer_ID=T2.customer_identity
order by T2.number_of_products_ordered, T1.customer_name
Run Code Online (Sandbox Code Playgroud) 我是否认为物化视图的列表索引与列出表的索引相同?换一种说法:
select *
from ALL_IND_COLUMNS
where TABLE_OWNER='SOME_OWNER'
and TABLE_NAME='SOME_TABLE'
order by INDEX_NAME, COLUMN_POSITION;
Run Code Online (Sandbox Code Playgroud) 我正在做一个Perl脚本将另一个变量附加到当前工作目录的末尾,但是我在使用该模块时遇到了问题.
如果我从中运行getcwd D:\,则返回的值为
D:/ (with forward slash)
Run Code Online (Sandbox Code Playgroud)
如果我从中运行getcwd D:\Temp\,则返回的值为
D:/temp (without forward slash)
Run Code Online (Sandbox Code Playgroud)
这使得情况非常棘手,因为如果我只是这样做:
use Cwd;
$ProjectName = "Project"; # This is a variable supplied by the user
$directory = getcwd().$ProjectName."\/";
print $directory."\n";
Run Code Online (Sandbox Code Playgroud)
我会以两种方式结束
D:/Project (correct)
Run Code Online (Sandbox Code Playgroud)
要么
D:/TempProject (instead of D:/Temp/Project)
Run Code Online (Sandbox Code Playgroud)
这是一个功能Cwd吗?它似乎不在文档中.
我已经想到了以下代码来解决这个问题.这需要3行.你们中的任何人都可以看到更简洁的方式吗?
use Cwd;
$ProjectName = "Project"; # This is a variable supplied by the user
$directory = getcwd();
$directory =~ s/(.+?)([^\\\/])$/$1$2\//g; # Append "/" if not terminating with forward/back slash
$directory .= $ProjectName."\/";
print …Run Code Online (Sandbox Code Playgroud)我有一个计数器变量,将由多个线程访问,这将增加/减少它.它不应该同时由多个线程更新.
我知道您可以创建一个互斥对象,必须在有问题的变量可以更改之前获取该互斥对象.在这种情况下,一个关键部分是不合适的,因为有多个函数可以改变有问题的变量.
还有另一个我可以不使用互斥锁吗?使用互斥锁确实会降低性能(请参阅http://www.codeguru.com/forum/showthread.php?t=333192).我相信在Java中,你可以在变量声明中使用一个关键词来实现它(它被称为"同步"吗?),但在C++中是否有这样的东西?
我知道volatile不是我要找的关键字.
非常感谢你.
我们有一个类层次结构,看起来像这样:
class base
{
};
class derived1 : protected base
{
private:
float m_price;
int m_quantity;
float m_value;
public:
// float calculateValue();
};
class derived2 : protected base
{
private:
double m_price;
long m_quantity;
double m_value;
public:
// double calculateValue();
};
Run Code Online (Sandbox Code Playgroud)
现在我们需要编写一个函数,通过乘以价格和数量来计算价值.目的是尽可能简单地在将来添加新类.您可能知道,这并不简单,因为这些字段的数据类型对于不同的类是不同的.实际上,我们有这些函数在概念上做同样的事情,但在编程术语中它们是不同的操作.
为了最大限度地减少所需的剪切和粘贴量,我能想到的解决方案是使用模板函数:
template <class A, B, C>
A calculate_value(B price, C quantity)
{
A result;
// Some code to do the multiplication, not sure if template specialisation is needed
return result;
};
class derived1 : protected base
{
private: …Run Code Online (Sandbox Code Playgroud) 在互联网上寻找C++脑筋急转弯,我发现了这个例子:
#include <iostream>
using namespace std;
class A {
public:
A()
{
cout << "A::A()" << endl;
}
~A()
{
cout << "A::~A()" << endl;
throw "A::exception";
}
};
class B {
public:
B()
{
cout << "B::B()" << endl;
throw "B::exception"; // <- crashes here
}
~B()
{
cout << "B::~B()";
}
};
int main(int, char**) {
try
{
cout << "Entering try...catch block" << endl;
A objectA;
B objectB;
cout << "Exiting try...catch block" << endl;
}
catch …Run Code Online (Sandbox Code Playgroud)