我知道空类的大小由标准定义为非零.在大多数实现中,它通常是 1个字节.
但是,C++标准是否指定了对象的最小可能大小?假设按照标准,空类对象的大小至少为 1个字节,这是合乎逻辑的.
我只是在视觉工作室中使用异常,并且使用上面的代码我期待,因为我的异常规范没有提到任何应该抛出bad_exception的内容.但实际发生的是异常被适当的处理程序捕获.为什么这样?我错过了IDE中的某些设置或其他内容吗?
虽然我被困在上面提到的,实际上我试图找到问题的答案,如果我有一个例外空白规范然后被称为什么?在意外()方法或*bad_exception*将如果双方以什么顺序来抛出?这是代码.
#include "stdafx.h"
#include <stdio.h>
#include <exception>
#include <iostream>
using namespace std;
class A
{
public:
int i;
};
void myunexpected ()
{
cerr << "unexpected called\n";
}
void doSomething(void) throw();
void doSomething(void) throw()
{
A obj;
obj.i= 100;
throw obj;
}
int _tmain(int argc, _TCHAR* argv[])
{
set_unexpected (myunexpected);
try
{
doSomething();
}
catch (bad_exception be)
{
puts("Caught something");
}
catch (A &obj)
{
puts("Caught Integer");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我想创建一个联系人组,给它一个特定的名称,然后添加联系人.
我可以通过使用RawContacts课程来建立联系,但我不知道如何
有人可以帮我解决一些示例代码吗?
我在algogeeks论坛上发现了这个.任何人都可以解释价值i是如何仍然0,但*p显示2虽然他们的地址是相同的.
#include<stdio.h>
int main()
{
const int i = 0;
int * p ;
p = (int *) & i;
*p = 2;
printf("(i,p): %x %x \n",&i,p);
printf("(i,p): %d %d \n",i,*p);
}
Run Code Online (Sandbox Code Playgroud)
该计划的输出是:
(i,p): bfdf6234 bfdf6234
(i,p): 0 2
Run Code Online (Sandbox Code Playgroud) 假设我有200个名为class1,class2等的类,派生自类,以及1到200之间的整数.有没有办法根据我的整数值明确地实现一个派生类?显然我可以手动检查每个值,但我想知道C++中有什么更灵活的东西
我只是想测试一下.我想知道我做错了什么?
#include <iostream>
using namespace std;
unsigned long pwr(unsigned long n, unsigned long m)
{
if(m == 0)
n = 1;
if(m == 1)
n = n;
n = pwr(n, m/2) * pwr(n, m/2);
return n;
}
int main ()
{
unsigned long n(2), m(16);
cout << pwr(n, m);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是
Segmentation fault
Run Code Online (Sandbox Code Playgroud) 据说数组是在编译时分配的,然后大小必须const在编译时可用.
但是下面的例子也有效,为什么?
#include <iostream>
#include <vector>
using namespace::std;
int main()
{
vector<int> ivec;
int k;
while(cin>>k)
ivec.push_back(k);
int iarr[ivec.size()];
for (size_t k=0;k<ivec.size();k++)
{
iarr[k]=ivec[k];
cout<<iarr[k]<<endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) 当我尝试传入一个数组作为参数时,我得到:
"No matching function to call to ' table::retrieve(const char[16], item&, int)'
Run Code Online (Sandbox Code Playgroud)
我试图用这个函数调用
program.reference.retrieve("Abecean Longfin", program.client_item, 1);
Run Code Online (Sandbox Code Playgroud)
功能是
int table::retrieve(char item_in[],item*item_list, int name_flag)
Run Code Online (Sandbox Code Playgroud)
我确信这是一件我不理解的简单事情,但我是新手.
我收到这个奇怪的链接器错误:
Error 1 error LNK2019: unresolved external symbol "public: virtual __thiscall Data::~Data(void)" (??1Data@@UAE@XZ) referenced in function "public: virtual __thiscall Job::~Job(void)" (??1Job@@UAE@XZ) C:\...\Job.obj
Error 2 error LNK2019: unresolved external symbol "public: __thiscall List::DataNode::DataNode(class List::DataNode const &)" (??0DataNode@List@@QAE@ABV01@@Z) referenced in function "public: __thiscall List::List(class List const *)" (??0List@@QAE@PBV0@@Z) C:\...\List.obj
Run Code Online (Sandbox Code Playgroud)
从第一个错误描述中,它可能与析构函数有关.
我有一个带有纯虚析构函数的空和抽象数据类:
virtual ~Data()=0;
Run Code Online (Sandbox Code Playgroud)
和一个派生自数据的类,带有一个简单的析构函数实现:
Job::~Job()
{
}
Run Code Online (Sandbox Code Playgroud)
你能发现问题吗?我该如何解决?谢谢!
以下是我的代码
const int i = 10;
cout<<i<<"\n";
int *ip = (int*)&i;
*ip = 20;
cout<<i<<"\n";
Run Code Online (Sandbox Code Playgroud)
我期待输出10和20.
但我得到输出10和10.
我能够编译程序,我没有在编译时或运行时得到任何错误,但没有得到预期的结果.如果我删除了变量i的常量,为什么新值没有分配给它?
如果有人能够解释发生了什么以及可以做些什么来实现我的预期结果,我将不胜感激.