Questions tagged «c++»

C ++是一种通用编程语言。它最初被设计为C的扩展,并且具有类似的语法,但是现在它是一种完全不同的语言。使用此标记可解决有关将要使用C ++编译器编译的代码的问题。对于与特定标准修订版[C ++ 11],[C ++ 14],[C ++ 17]或[C ++ 20]等相关的问题,请使用特定于版本的标记。

5
C ++:命名空间—如何在头文件和源文件中正确使用?
考虑一对两个源文件:接口声明文件(*.h或*.hpp)及其实现文件(*.cpp)。 让*.h文件如下所示: namespace MyNamespace { class MyClass { public: int foo(); }; } 我已经看到了两种在源文件中使用名称空间的实践: *.cpp 显示练习1: #include "MyClass.h" using namespace MyNamespace; int MyClass::foo() { ... } *.cpp 显示练习2: #include "MyClass.h" namespace MyNamespace { int MyClass::foo() { ... } } 我的问题是:这两种做法之间是否有差异,是否认为其中一种更好?

1
存在从派生*到基本*的转换,但无法访问
为什么即使c是一个结构并且默认情况下具有公共继承,以下代码也会产生此错误? struct c { protected: int i; public: c(int ii=0):i(ii){} virtual c *fun(); }; c* c::fun(){ cout<<"in c"; return &c(); } class d : c { public: d(){} d* fun() { i = 9; cout<<"in d"<<'\t'<<i; return &d(); } }; int main() { c *cc; d dd; cc = ⅆ …
88 c++  inheritance 

5
将共享指针作为参数传递
如果我声明一个包装在共享指针中的对象: std::shared_ptr<myClass> myClassObject(new myClass()); 然后我想将其作为方法的参数传递: DoSomething(myClassObject); //the called method void DoSomething(std::shared_ptr<myClass> arg1) { arg1->someField = 4; } 上面是否只是简单地增加了shared_pt的引用计数,并且一切都很酷?还是留下一个悬空的指针? 您仍然应该这样做吗?: DoSomething(myClassObject.Get()); void DoSomething(std::shared_ptr<myClass>* arg1) { (*arg1)->someField = 4; } 我认为第二种方法可能更有效,因为它只需要复制1个地址(而不是整个智能指针),但是第一种方法似乎更具可读性,并且我预计不会出现性能限制。我只想确保它没有危险。 谢谢。

6
如何比较指针?
假设我有2个指针: int *a = something; int *b = something; 如果我想比较它们,看看它们是否指向同一个地方,则(a == b)是否有效?
88 c++  pointers 

7
在switch语句中使用Continue
我想从switch语句的中间跳到以下代码中的循环语句: while (something = get_something()) { switch (something) { case A: case B: break; default: // get another something and try again continue; } // do something for a handled something do_something(); } 这是有效的使用方式continue吗?是continue通过忽略声明switch语句?C和C ++的行为是否有所不同?


4
C ++自动与自动
创建局部变量时,使用(const) auto&或auto是否正确? 例如: SomeClass object; const auto result = object.SomeMethod(); 要么 const auto& result = object.SomeMethod(); SomeMethod()返回非原始值的地方-可能是另一个用户定义的类型。我的理解是const auto& result正确的,因为SomeMethod()返回的结果将为返回的类型调用复制构造函数。如果我错了,请纠正我。 原始类型呢?我认为const auto sum = 1 + 2;是正确的。 这是否也适用于基于范围的for循环? for(const auto& object : objects)
88 c++  auto 

14
C ++中隐藏敏感字符串的技巧
我需要在我的C ++应用程序中存储敏感信息(我想保持私有的对称加密密钥)。简单的方法是这样做: std::string myKey = "mysupersupersecretpasswordthatyouwillneverguess"; 但是,在整个strings过程中运行该应用程序(或从二进制应用程序中提取字符串的任何其他程序)将显示上述字符串。 应该使用什么技术来掩盖此类敏感数据? 编辑: 好的,几乎所有人都说过“您的可执行文件可以进行反向工程” -当然!这是我的宠儿,所以在这里我要大声疾呼: 为什么在该站点上所有与安全相关的问题中有99%(好的,所以我可能会夸张地说)用“没有可能创建完美安全的程序的方法”的洪流回答-这无济于事回答!安全性是介于完美可用性和一端没有安全性,而另一端是完美安全性却没有可用性之间的滑动标度。 关键是要根据您要执行的操作以及软件运行的环境,在此滑动标尺上选择位置。我不是在为军事安装编写应用程序,而是在为家用PC编写应用程序。我需要使用已知的加密密钥在不受信任的网络上加密数据。在这些情况下,“通过隐蔽性实现安全”可能就足够了!当然,有足够时间,精力和技能的人可以对二进制文件进行反向工程并找到密码,但是您猜怎么着?我不在乎: 实施一流的安全系统所花的时间要比由于破解版本而导致的销售损失要昂贵得多(不是我实际上是在出售此产品,但我明白了)。至少可以这样说,在新程序员中,这种蓝天式的“让它以绝对最佳的方式做到这一点”的趋势是愚蠢的。 感谢您抽出宝贵的时间来回答这个问题-他们最有帮助。不幸的是,我只能接受一个答案,但是我投票赞成所有有用的答案。

5
“ Objective-C比C ++更严格地是C的超集”的确切含义是什么?
根据我在那阅读的内容:为什么Objective-C在Apple社区之外不那么受欢迎? Objective-C是C的超集(实际上比C ++严格得多),因此不会出现向后兼容的问题。您可以用C语言做的任何事情都可以用Objective-C语言做。 成为超集是二元的,就像怀孕一样。Obj-C是C的超集,而C ++不是。 超集是什么意思?Objective-C将以哪种方式更接近//向后兼容C?与C ++相比,objective-C在哪种方面更遵循C哲学? 是否可以不经目标C编译器(100%兼容性)修改而编译任何C程序? 与其说是哪个更好,不如说是关于编程语言设计和兼容性的问题。
87 c++  objective-c  c 

10
为什么printf(“%f”,0); 给未定义的行为?
该声明 printf("%f\n",0.0f); 打印0。 但是,声明 printf("%f\n",0); 打印随机值。 我意识到我表现出某种不确定的行为,但我不知道具体为什么。 所有位均为0的浮点值仍然是有效的float,值为0。 float并且int在我的计算机上具有相同的大小(如果相关)。 为什么使用整数文字而不是浮点文字printf会导致此行为? PS如果我使用可以看到相同的行为 int i = 0; printf("%f\n", i);

5
在Linux下的GCC中使用std :: thread的正确链接选项是什么?
嗨,我正在尝试std::thread与G ++一起使用。这是我的测试代码 #include <thread> #include <iostream> int main(int, char **){ std::thread tt([](){ std::cout<<"Thread!"<<std::endl; }); tt.join(); } 它可以编译,但是当我尝试运行它时,结果是: terminate called after throwing an instance of 'std::system_error' what(): Operation not permitted Aborted 我的编译器版本: $ g++ --version g++ (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1 Copyright (C) 2011 Free Software Foundation, Inc. This is free software; see …

13
我可以在Windows(x64)64位环境上运行Memcached吗?
有谁知道IF,何时或如何使Memcached在Windows 64位环境上运行? 我正在设置一个新的托管解决方案,并且更希望运行64位操作系统,并且由于它是带有SQL Server DB的ASP.Net MVC解决方案,因此该操作系统将是Windows Server 2003或(希望如此)2008。 我知道这可能波及关于32位VS服务器上的64位进行辩论,但我们只想说,我的选择是64位,并且我有一些非常 好的理由。 到目前为止,我已经尝试了许多选项,并找到了一些与在32位计算机上进行安装有关的帮助(并且可能会添加成功),但是由于原始的Windows端口是Win32专用的,因此这几乎无济于事在x64上作为服务安装时。它也依赖于libevent,为此我只能获得Win32编译版本。 我怀疑仅仅将所有这些都加载到C ++中并点击“编译”(对于64位)是行不通的,尤其是由于32位和64位体系结构的复杂差异,但是我想知道是否有人在努力解决这个问题地面?不幸的是,我的专长仅在于托管代码(C#),否则我会自己尝试,但我不敢相信我是唯一尝试在64位Windows服务器上运行memcached的人。 ..我吗? 更新资料 是的,我担心我还在寻找答案-我(使用我的可怜的C ++技能)为稳定构建所做的所有努力都失败了-我浪费了一台服务器,而3个VM仅在尝试中,所以现在求助于真正的专家。有人打算将此移植到64位吗?还是您真的建议我改用MS Velocity?我为这个念头发抖。 更新:@Lars-我确实使用Enyim-很好,但是您指的是客户端,而不是服务器部分。 @DannySmurf-我只能将其作为服务安装在32位OS上。64位操作系统拒绝安装此Win32服务。当然可以,许多Win32代码可在x64架构上无缝运行,因此您可以在Vista / XP 64等平台上运行32位应用程序(例如Office)或游戏,但这在服务方面并不能直接转换。我不是专家,我怀疑这与同步或需要订阅服务的事件有关,并且我怀疑64和32不能很好地发挥作用。很高兴对此进行更正,但很高兴回答您的问题-是的,我已经尝试过。 @OJ-非常感谢您的直截了当的回复。我想了很多,但不确定是否有人提出建议或已经走了这条路。也许当StackOverflow处于活动状态时,那么会有更多的人做出回应,让我知道是否正在调查这个问题,尽管我可以自己尝试编译它-我根本无法“相信”(根据我的C ++经验)将在大型可扩展解决方案的关键组成部分中提供“企业级”可靠性。我认为,在我有信心之前,这需要有教养的干预方法,而不是我未经验证的实验方法。我的一点疏忽可能会使网站瘫痪。哦...直到下一次。
87 c#  c++  windows  64-bit  memcached 

12
TCHAR是否仍然相关?
我是Windows编程的新手,在阅读Petzold的书后,我感到奇怪: 使用TCHAR类型和_T()函数声明字符串是否仍然是一种好习惯,或者是否应该在新代码中仅使用wchar_tandL""字符串? 我将仅针对Windows 2000及更高版本,并且从一开始我的代码就是i18n。
87 c++  c  windows  unicode  wchar-t 

5
模块对SAFESEH映像C ++不安全
我正在使用Microsoft Visual Studio 2011 Professional Beta 我正在尝试运行使用cMake和Visual Studio Complier编译的OpenCV C ++文件(http://opencv.willowgarage.com/wiki/Welcome)。 但是,当我去调试项目时,我遇到600多个错误,其中大多数是: 错误LNK2026:对于SAFESEH映像,模块不安全。 这些文件显然在opencv_ffmpeg项目中,但是我找不到它们,我已经查看了Microsoft帮助页面上的safeseh安全异常处理程序页面,但是找不到任何明确的答案。 我想知道是否还有其他人有这个问题,他们是否设法解决了。

4
获取std :: string的最后一个元素
我想知道是否有缩写或更优雅的方式来获取字符串的最后一个字符,例如: char lastChar = myString.at( myString.length() - 1 ); 喜欢的东西myString.back()似乎并不存在。有等同的吗?
87 c++  string 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.