我正在寻找有关基本C++类型大小的详细信息.我知道这取决于架构(16位,32位,64位)和编译器.
但是有没有C++的标准?
我在32位架构上使用Visual Studio 2008.这是我得到的:
char : 1 byte
short : 2 bytes
int : 4 bytes
long : 4 bytes
float : 4 bytes
double: 8 bytes
Run Code Online (Sandbox Code Playgroud)
我试图找到,但没有成功,可靠的信息,表述的大小char,short,int,long,double,float(和其他类型的我没想到的),在不同的体系结构和编译器.
在C++中,我想知道为什么bool类型是8位长(在我的系统上),只有一位足以保存布尔值?
我曾经认为这是出于性能原因,但是在32位或64位机器上,寄存器为32或64位宽,性能优势是什么?
或者这只是这些"历史"原因之一?
我正在使用QtCreator在我的Mac上开发一个非常简单的应用程序.
这是一个控制台应用程序,我希望用户输入其名称,然后显示他的名字.这是代码:
#include <iostream>
int main(int ArgC, char* ArgV[])
{
char Name[1000];
std::cout << "Type your name : ";
std::cin >> Name;
std::cout << "Hello " << Name << "\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用QtCreator运行此应用程序时,"应用程序输出"选项卡中会显示"键入您的姓名:"字符串.但如果我键入一些文本并按回车键,则不会发生任何事情.
怎么了 ?
我在VBScript中遇到了一些奇怪的事情.在编写我希望通过引用传递参数的过程时,调用此过程的方式会改变参数的传递方式!
这是一个例子:
Sub IncrementByRef(ByRef Value)
Value = Value + 1
End Sub
Sub IncrementByVal(ByVal Value)
Value = Value + 1
End Sub
Dim Num
Num = 10
WScript.Echo "Num : " & Num
IncrementByRef(Num) : WScript.Echo "IncrementByRef(Num) : " & Num
IncrementByRef Num : WScript.Echo "IncrementByRef Num : " & Num
IncrementByVal(Num) : WScript.Echo "IncrementByVal(Num) : " & Num
IncrementByVal Num : WScript.Echo "IncrementByVal Num : " & Num
Run Code Online (Sandbox Code Playgroud)
这是输出:
U:\>cscript //nologo byrefbyval.vbs
Num : 10
IncrementByRef(Num) : 10
IncrementByRef …Run Code Online (Sandbox Code Playgroud) 鉴于此代码示例:
complex.h:
#ifndef COMPLEX_H
#define COMPLEX_H
#include <iostream>
class Complex
{
public:
Complex(float Real, float Imaginary);
float real() const { return m_Real; };
private:
friend std::ostream& operator<<(std::ostream& o, const Complex& Cplx);
float m_Real;
float m_Imaginary;
};
std::ostream& operator<<(std::ostream& o, const Complex& Cplx) {
return o << Cplx.m_Real << " i" << Cplx.m_Imaginary;
}
#endif // COMPLEX_H
Run Code Online (Sandbox Code Playgroud)
complex.cpp:
#include "complex.h"
Complex::Complex(float Real, float Imaginary) {
m_Real = Real;
m_Imaginary = Imaginary;
}
Run Code Online (Sandbox Code Playgroud)
main.cpp:
#include "complex.h"
#include <iostream>
int main()
{
Complex …Run Code Online (Sandbox Code Playgroud) 我一直认为在C++中声明一个数组时,大小必须是一个常量整数值.
例如 :
int MyArray[5]; // correct
Run Code Online (Sandbox Code Playgroud)
要么
const int ARRAY_SIZE = 6;
int MyArray[ARRAY_SIZE]; // correct
Run Code Online (Sandbox Code Playgroud)
但
int ArraySize = 5;
int MyArray[ArraySize]; // incorrect
Run Code Online (Sandbox Code Playgroud)
以下是Bjarne Stroustrup在C++编程语言中的解释:
数组的元素数量(数组绑定)必须是常量表达式(§C.5).如果需要变量边界,请使用向量(§3.7.1,§16.3).例如:
void f(int i) {
int v1[i]; // error : array size not a constant expression
vector<int> v2(i); // ok
}
Run Code Online (Sandbox Code Playgroud)
但令我惊讶的是,上面的代码在我的系统上编译得很好!
这是我试图编译的内容:
void f(int i) {
int v2[i];
}
int main()
{
int i = 3;
int v1[i];
f(5);
}
Run Code Online (Sandbox Code Playgroud)
我没有错!我正在使用GCC v4.4.0.
有什么我想念的吗?
这是一段简单的代码,其中除以零.我想抓住它:
#include <iostream>
int main(int argc, char *argv[]) {
int Dividend = 10;
int Divisor = 0;
try {
std::cout << Dividend / Divisor;
} catch(...) {
std::cout << "Error.";
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是应用程序无论如何都会崩溃(即使我选择-fexceptions了MinGW).
是否有可能捕获到这样的异常(我理解的不是C++异常,而是FPU异常)?
我知道我可以在分割之前检查除数,但我做了一个假设,因为除零是罕见的(至少在我的应用程序中),尝试分割会更有效(并且如果捕获错误则更有效)它发生)而不是每次除数前的除数.
我正在WindowsXP计算机上进行这些测试,但是想让它跨平台.
这是我用QtCreator创建的一个非常简单的C++应用程序:
int main(int argc, char *argv[])
{
int a = 1;
int b = 2;
if (a < 1 or b > 3)
{
return 1;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
对我来说,这不是有效的C++,因为关键字或不是保留关键字.
但是如果我编译并运行它,它没有任何警告就可以正常工作!退出代码为0,如果我改变b = 4,则退出代码为1!
我没有包括任何东西,以确保没有隐藏的定义.
这对我来说真的很奇怪.这是Qt定义的东西吗?我在文档中没有找到任何相关内容.
为了满足客户的功能要求,我希望我的应用程序在互联网可用时,如果有新版本,请查看我们的网站.
问题是我不知道在服务器端需要做什么.
我可以想象我的应用程序(使用Qt在C++中开发)必须向服务器发送请求(HTTP?),但是这个请求会响应什么?为了通过防火墙,我想我将不得不使用端口80?它是否正确 ?
或者,对于这样的功能,我是否必须要求我们的网络管理员打开我将通信的特定端口号?
@ pilif:谢谢你的详细解答.还有一些我不清楚的事情:
喜欢
http://www.example.com/update?version=1.2.4然后你可以返回你想要的东西,也可能是新版本安装程序的下载URL.
我该如何退货?它会是一个php或asp页面(我对PHP和ASP一无所知,我不得不承认)?如何解码?version=1.2.4零件以便相应地返回内容?
我需要制作体育赛事的时间表.
有30支球队.每支球队必须打8场比赛.这意味着每支球队都不可能再次参加所有其他球队的比赛,但我需要避免这两支球队相互竞争不止一次.
我的想法是生成所有可能的比赛(对于30支球队:) (30*29)/2 = 435 matches并从这个列表中选择120场比赛(每场比赛8场比赛:) 8 * 30 / 2 = 120 matches.
这是我很难过的地方:我怎样才能选择这120场比赛?我尝试了一些简单的解决方案(列表的第一个匹配,然后是最后一个,依此类推),但它们似乎不适用于30个团队.我还尝试生成所有可能的匹配组合并找到哪一个正在工作但是有30个团队,这是太多的计算时间.
是否有我可以实现的现有算法?
UPDATE
我需要制作的是一个简单的时间表,没有消除.每支球队都有8场比赛,就这样.在一天结束时,将不会有一个赢家.
每个团队都会有他的日程安排,这个日程安排不会改变他们的输赢.规划是一整天完成的,是不可改变的.
更新2
起初,我不想对我的问题设置太多限制,但似乎没有任何限制(除了每个团队不会相互竞争多次),这只是随机选择每个8个匹配的问题球队.
所以这里有更多细节:
在这项体育赛事期间,有6种不同的运动(足球,手球,篮球等).这意味着有6个同时匹配.每15分钟开始一轮新一轮比赛.
每支球队必须参加8场比赛,每项运动至少一次.
这6项运动分别在三个不同的地方进行.这意味着在白天,每个团队都必须从一个地方搬到另一个地方.应尽可能减少这些举措.
一支球队不能连续打两场比赛.
c++ ×7
qt ×2
algorithm ×1
arrays ×1
boolean ×1
c++-faq ×1
gcc ×1
header-files ×1
mingw ×1
or-operator ×1
performance ×1
qt-creator ×1
size ×1
vbscript ×1