小编Jér*_*ôme的帖子

C++标准规定了int的大小,long类型是什么?

我正在寻找有关基本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++ c++-faq

679
推荐指数
15
解决办法
120万
查看次数

C++:为什么bool是8位长?

在C++中,我想知道为什么bool类型是8位长(在我的系统上),只有一位足以保存布尔值?

我曾经认为这是出于性能原因,但是在32位或64位机器上,寄存器为32或64位宽,性能优势是什么?

或者这只是这些"历史"原因之一?

c++ size boolean

127
推荐指数
4
解决办法
6万
查看次数

使用Qt Creator控制台输入

我正在使用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运行此应用程序时,"应用程序输出"选项卡中会显示"键入您的姓名:"字符串.但如果我键入一些文本并按回车键,则不会发生任何事情.

怎么了 ?

qt qt-creator

32
推荐指数
2
解决办法
5万
查看次数

VBScript中的ByRef和ByVal

我在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)

vbscript

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

头文件中的多重定义

鉴于此代码示例:

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++ header-files

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

使用非常量变量声明数组大小

我一直认为在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 StroustrupC++编程语言中的解释:

数组的元素数量(数组绑定)必须是常量表达式(§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.

有什么我想念的吗?

c++ arrays gcc

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

C++:捕获除零错误

这是一段简单的代码,其中除以零.我想抓住它:

#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)

但是应用程序无论如何都会崩溃(即使我选择-fexceptionsMinGW).

是否有可能捕获到这样的异常(我理解的不是C++异常,而是FPU异常)?

我知道我可以分割之前检查除数,但我做了一个假设,因为除零是罕见的(至少在我的应用程序中),尝试分割会更有效(并且如果捕获错误则更有效)它发生)而不是每次除数前的除数.

我正在WindowsXP计算机上进行这些测试,但是想让它跨平台.

c++ performance exception-handling mingw

27
推荐指数
4
解决办法
5万
查看次数

或者是无效的C++:为什么这段代码会编译?

这是我用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定义的东西吗?我在文档中没有找到任何相关内容.

c++ or-operator

24
推荐指数
3
解决办法
8841
查看次数

自动检查我的应用程序的新版本

为了满足客户的功能要求,我希望我的应用程序在互联网可用时,如果有新版本,请查看我们的网站.

问题是我不知道在服务器端需要做什么.

我可以想象我的应用程序(使用Qt在C++中开发)必须向服务器发送请求(HTTP?),但是这个请求会响应什么?为了通过防火墙,我想我将不得不使用端口80?它是否正确 ?

或者,对于这样的功能,我是否必须要求我们的网络管理员打开我将通信的特定端口号?


@ pilif:谢谢你的详细解答.还有一些我不清楚的事情:

喜欢

http://www.example.com/update?version=1.2.4

然后你可以返回你想要的东西,也可能是新版本安装程序的下载URL.

我该如何退货?它会是一个php或asp页面(我对PHP和ASP一无所知,我不得不承认)?如何解码?version=1.2.4零件以便相应地返回内容?

c++ qt

22
推荐指数
4
解决办法
8906
查看次数

策划比赛

我需要制作体育赛事的时间表.

有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项运动分别在三个不同的地方进行.这意味着在白天,每个团队都必须从一个地方搬到另一个地方.应尽可能减少这些举措.

一支球队不能连续打两场比赛.

algorithm

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