根据标准(§5.2.11),const_cast抛弃了cv-qualifiers(const或volatile).
这是一个简单的例子.首先,您声明两个函数采用指针和引用:
class Bar { ... };
void foo_ptr(Bar*);
void foo_ref(Bar&);
Run Code Online (Sandbox Code Playgroud)
然后你创建一个引用到const:
Bar b;
const Bar& cb = b;
Run Code Online (Sandbox Code Playgroud)
然后你可以使用适当的const_cast调用任一函数:
foo_ptr(const_cast<Bar*>(&cb));
foo_ref(const_cast<Bar&>(cb));
Run Code Online (Sandbox Code Playgroud)
这是我的问题:由于const_cast无法完成其他演员的设计,你投射的内容不是很明显吗?换句话说,为什么语言不允许我简单地说:
foo_ptr(const_cast<>(&cb));
foo_ref(const_cast<>(cb));
Run Code Online (Sandbox Code Playgroud)
我只能想到以下两个原因:
a)当我尝试做一些疯狂的事情时,编译器应该阻止我,例如:
foo_ptr(const_cast<int*>(&cb));
foo_ref(const_cast<int&>(cb));
Run Code Online (Sandbox Code Playgroud)
并强迫我明确说明我正在施放的类型,然后可以防止行为不端.我发现这个(假设的)解释很弱,因为如果语言偏好允许我写下错误只是为了让编译器纠正我,这将是奇怪的.
b)如果变量既是const又是volatile,则可能存在歧义.在这种情况下,编译器无法告诉我是否试图抛弃一个或另一个(或两者).
这是为什么,还是有其他原因?
我正在尝试为游戏设计武器类.这是我提出的满足我需求的一些代码:
class weapon {
public:
int fireRate;
int bulletDamage;
int range;
ofImage sprite;
ofImage bulletSprite;
bullet bullets[50];
int activeBullet;
public:
void fire();
};
class machineGun: public weapon {
public:
void fire();
};
class flamer: public weapon {
public:
void fire();
};
Run Code Online (Sandbox Code Playgroud)
然后我想定义一个像这样的武器数组:
//Weapon variables
const int totalWeapons = 2;
int currentWeapon = 1;
weapon weapons[totalWeapons];
Run Code Online (Sandbox Code Playgroud)
我希望element [0]代表machineGun类,而element [1]代表flamer类.我是否正确地解决了这个问题?我应该以某种方式重构这个吗?我如何实现一个拥有这两种不同武器的阵列?
这个想法是这样的,当我打电话给weapons[0].fire();我得到一个机枪类,当我打电话给weapons[1].fire();我时,我得到了火焰.
编辑:谢谢你的帮助.我在使用"weapon [0] = new machineGun;"时遇到了一些问题.当我尝试运行此代码时,我收到错误"无法分配常量大小为0的数组".
有没有人知道为什么这不起作用?我更新的代码看起来像这样:
//Weapon variables
const int totalWeapons = 2;
int currentWeapon = …Run Code Online (Sandbox Code Playgroud) 在我的程序中,我需要下载一个文件,我发现了这篇文章:
http://www.java2s.com/Code/Cpp/Qt/DownloadfromURL.htm
这段代码确实有效,但它不适合我的程序,所以我重新编写了它.我还没有完成所有这些,但我已经编码了基础知识.但是,当我测试它时,会弹出一个发送错误报告窗口.
到目前为止这是我的代码:
QtDownload.h
#include <QObject>
#include <QString>
#include <QNetworkAccessManager>
#include <QNetworkReply>
class QtDownload : public QObject
{
Q_OBJECT
public:
explicit QtDownload();
~QtDownload();
void setTarget(const QString& t);
private:
QNetworkAccessManager manager;
QNetworkReply* reply;
QString target;
void connectSignalsAndSlots();
signals:
public slots:
void download();
void downloadFinished(QNetworkReply* data);
void downloadProgress(qint64 recieved, qint64 total);
};
Run Code Online (Sandbox Code Playgroud)
QtDownload.cpp
#include "qtdownload.h"
#include <QUrl>
#include <QNetworkRequest>
#include <QFile>
QtDownload::QtDownload()
: QObject(0)
{
this->connectSignalsAndSlots();
}
QtDownload::~QtDownload()
{
if (reply != 0)
delete reply;
}
void QtDownload::connectSignalsAndSlots()
{
QObject::connect(&manager, SIGNAL(finished(QNetworkReply*)),this, …Run Code Online (Sandbox Code Playgroud) 我正在通过所有现有问题的帖子,但无法得到一些相关的东西.
我有人数名,姓,地址1,地址2,国家代码,出生日期的数百万条记录的文件 - 我想每天检查我的客户名单(我的客户名单也每天更新和文件也每天更新).
对于名字和姓氏,我想模糊匹配(可能是lucene fuzzyquery/levenshtein距离90%匹配),对于剩余字段国家和出生日期我想要完全匹配.
我是Lucene的新手,但通过查看帖子的数量,看起来很可能.
我的问题是:
还有其他方法可以实现吗?
我正在编写PHP登录系统.我有我需要的所有工作,但我想验证在注册期间输入的用户名只包含字母数字字符.那么我怎么能拿一个变量,比如$ username,并确保它只包含字母数字字符?
我是Android开发的新手.我试图通过使用SimpleAdapter填充一个微调器.但是微调器的列表显示空白元素.当我单击任何元素时,其文本在Toast中正确显示.请告诉我下面的代码中有什么问题.
public void onCreate(Bundle savedInstanceState) {
private List<Map<String, String>> data = new ArrayList<Map<String, String>>();
String[] from = new String[] { "colorsData" };
int[] to = new int[] { R.id.spinner };
String[] colors = getResources().getStringArray(R.array.colorsData);
for (int i = 0; i < colors.length; i++) {
data.add(addData(colors[i]));
}
Spinner spinner = (Spinner) findViewById(R.id.spinner);
SimpleAdapter simpleAdapter = new SimpleAdapter(this, data, android.R.layout.simple_spinner_item, from, to);
simpleAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(simpleAdapter);
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(
parent.getContext(),
"Selected …Run Code Online (Sandbox Code Playgroud) 例 print_r($myarray)
Array
(
[0] => Array
(
[id] => 6578765
[name] => John Smith
[first_name] => John
[last_name] => Smith
[link] => http://www.example.com
[gender] => male
[email] => email@domain.com
[timezone] => 8
[updated_time] => 2010-12-07T21:02:21+0000
)
)
Run Code Online (Sandbox Code Playgroud)
问题,如何获得$myarray单值如:
echo $myarray['email']; will show email@domain.com
Run Code Online (Sandbox Code Playgroud) 给出以下代码:
#include<stdio.h>
int main()
{
int a=1;
switch(a)
{ int b=20;
case 1:
printf("b is %d\n",b);
break;
default:
printf("b is %d\n",b);
break;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您认为b这两种printf陈述中的价值是什么?当然,它不是20.
现在,我意识到此前提出过这类问题(特别是这个 - 我认为这是对两个对象的非常好的描述).我的问题更多是围绕表现.我有几个XML文档,大小超过100 - 300 K. 我注意到将这些信息加载到一个XDocument而不是一个XmlDocument对象时会有一些延迟.这两个对象之间是否存在严重的性能差异?他们是否以不同方式访问XML的内容?使用XML字符串时,这是首选的,或者是有区别的.这些对象的最终用途是XPath在有问题的对象上运行查询(或LINQ,取决于).
同样,这主要是性能问题,涉及内存和速度.
在Xcode中,我可以在宏中使用##吗?
在MSVC中我可以写:
#define FOO(_var) int foo##_var## = 1
FOO(bar);
foobar++;
Run Code Online (Sandbox Code Playgroud)
在Mac上(编辑:用GCC编译)相同的代码给我错误"粘贴"foobar"和"="没有给出有效的预处理令牌.在xcode中不支持##吗?
c++ ×3
php ×2
.net ×1
android ×1
arrays ×1
c ×1
casting ×1
fuzzy-search ×1
linq-to-xml ×1
lucene ×1
performance ×1
polymorphism ×1
preprocessor ×1
qt ×1
qt4 ×1
spinner ×1
standards ×1
xcode ×1
xml ×1
xmldocument ×1