可能重复:
无意中使用=而不是==
C++编译器通过您编写的警告让您知道
if( a = b ) { //...
Run Code Online (Sandbox Code Playgroud)
并且这可能是一个错误,你当然想写
if( a == b ) { //...
Run Code Online (Sandbox Code Playgroud)
但有没有一种情况应该忽略警告,因为这是使用这个"功能"的好方法?我没有看到任何代码清晰度可能的原因,那么它有用吗?
标题说明了一切.已#pragma once被标准化了的C++ 0x?我不知道任何编译器没有提供它的实现,几乎总是相同的语义和名称.
#include <iostream>
class Base
{
public:
virtual void ok( float k ){ std::cout<< "ok..." << k; }
virtual float ok(){ std::cout<< "ok..."; return 42.0f; }
};
class Test : public Base
{
public:
void ok( float k ) { std::cout<< "OK! " << k; }
//float ok() { std::cout << "OK!"; return 42; }
};
int main()
{
Test test;
float k= test.ok();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
GCC 4.4下的汇编:
hello_world.cpp: In function `int main()`:
hello_world.cpp:28: erreur: no matching function for call …Run Code Online (Sandbox Code Playgroud) 这实际上是3个问题:
(制作社区维基 - 不确定组织,也许应该编辑第一个答案以获得完整的ISO语言列表?)
这是一个示例代码:
enum Foo // or enum class whatever
{ BAR
, STUFF
};
inline const char* to_string( const Foo& foo )
{
static const char* const NAMES[] =
{ "BAR"
, "STUFF"
};
// let's assume I have some boundary checks here, it's not the point
return NAMES[foo];
};
Run Code Online (Sandbox Code Playgroud)
此函数是内联的,位于多个编译单元中使用的标头中.这里的目标是在没有使用此函数的情况下使编译器不执行任何操作.
问题:
在此演示文稿中:http://qtconference.kdab.com/sites/default/files/slides/mutz-dd-speed-up-your-qt-5-programs-using-c++11.pdf
作者建议N-ary构造函数受益于C++ 11版本的explicit关键字.
如果你有多个构造函数参数,那么在C++ 11中有什么变化可以使这个关键字变得有用?
我正在研究一款需要高性能的视频游戏,所以我试图设置一个好的记忆策略或游戏的特定部分,即游戏"模型",即游戏表现.我有一个包含整个游戏表示的对象,里面有不同的管理器,以保持表示符合游戏规则.每个游戏实体当前都是由特定类型的工厂生成的,所以我有几个工厂允许我按照自己的意愿隔离和更改这些实体的内存管理.
现在,我正在选择这两种选择之间:
现在,我对A有了一些现实世界的经验,所以我对B没有经验,并希望对这些解决方案有一些建议,对于一个长寿项目.对于长寿项目来说,哪种解决方案似乎更好?为什么?(注意:在这种情况下,确实需要一个池,因为游戏模型也用于游戏编辑,所以会有很多小对象的分配/释放).
编辑澄清:如果(我还不清楚)我正在使用C++
大量的分析表明,当需要性能(速度)时,C++流不是执行文件或文本字符串操作的最佳方式.尽管如此,标准流仍然是保证类型安全的好方法.
根据我的阅读,大部分问题是因为流实现必须1)创建/复制许多小对象2)完全通用(不管理char和wchar的方式相同吗?)等.
无论如何,我在想,也许某些C++ 0x会允许实现者至少限制对象创建/复制,也许还有其他功能可以允许其他性能改进,也许允许达到printf()性能?
有直接影响吗?或者我们是否必须等待新的实施?或者我们还需要一个新的(类似STL)流库吗?
在C++ 0X中使用基于范围的循环,我知道我们将能够:
std::vector<int> numbers = generateNumbers();
for( int k : numbers )
{
processNumber( k );
}
Run Code Online (Sandbox Code Playgroud)
(用lambda编写可能更简单)
但是,如果我只想将processNumber(k)应用于数字的一部分,我该怎么办?例如,我应该如何编写for for循环以将processNumber()应用于数字的一半(头部或尾部)?像Python或Ruby一样允许"切片"吗?
假设您必须编写一种基于xml(无选择)的语言,最终将成为某种"标准"格式,被全球数十亿应用程序使用,或者至少您希望它. 该语言将类似于互联网的HTML,但在另一个特定的域中.一些非常简单和描述性的东西,将由工具和其他应用程序解释.
现在让我们说你对XML的工作方式有了基本的了解(你知道标签是如何工作的,它们可能有属性,元素中可能有元素......).你真的很了解这个领域,但你之前从未编写过语言或基于xml的格式规范(除了公司内部工具的一些基本xml格式).
你还需要知道什么才能正确地完成你的工作?也许某些XML语言特定的功能?也许使用XSD文件作为规范文件?
总结一下:在为这种语言设计和编写规范时,最佳做法是什么?