我一直在使用autoC++ 11标准中提供的新关键字来处理复杂模板类型,这是我认为它的设计目标.但我也用它来做:
auto foo = std::make_shared<Foo>();
Run Code Online (Sandbox Code Playgroud)
更加怀疑的是:
auto foo = bla(); // where bla() return a shared_ptr<Foo>
Run Code Online (Sandbox Code Playgroud)
我没有看到很多关于这个话题的讨论.似乎auto可能过度使用,因为类型通常是文档和健全性检查的一种形式.您在哪里绘制使用线auto以及此新功能的推荐用例是什么?
澄清:我不是要求哲学观点; 我要求标准委员会对该关键字的预期用途,可能还有关于如何在实践中实现该预期用途的评论.
旁注:此问题已移至SE.Programmers,然后返回Stack Overflow.关于这一点的讨论可以在这个元问题中找到.
什么是一个转换的好干净的方式std::vector<int> intVec来std::vector<double> doubleVec.或者,更一般地说,转换两种可转换类型的向量?
我想在GCC中启用对C++ 0x的支持-std=c++0x.我并不一定需要GCC 4.5中的任何当前支持的C++ 11功能(很快就会有4.6),但我想开始习惯它们.例如,在我使用迭代器的一些地方,auto类型会很有用.
但同样,我不需要任何当前支持的功能.这里的目标是鼓励我将新标准的特征融入我的编程"词汇"中.
根据您对C++ 11支持的了解,在GCC中启用它是一个好主意,然后通过例如从使用切换boost::shared_ptr到std::shared_ptr专用来实现它,因为两者不混合?
PS:我知道这个比较不同口味的好问题,shared_ptr但是我要求在标准最终确定之前提出更高级别的建议.另一种说法是,当像GCC这样的编译器说它支持"实验性功能"时,这是否意味着我可能会在编译过程中遇到奇怪的错误,这些错误将成为主要的时间汇,并且是StackOverflow上一个神秘问题的来源?
编辑:我决定退回,std::shared_ptr因为我只是不相信它在GCC 4.5中的支持,如本问题中的示例所示.
我总是试图更多地了解我使用的语言(不同的样式,框架,模式等).我注意到我从未使用过,std::for_each所以我想也许我应该开始.在这种情况下的目标是扩展我的思想,而不是在某种程度上改进代码(可读性,表达性,紧凑性等).
因此,考虑到上下文,使用std::for_each简单的任务是一个好主意,比如打印出一个向量:
for_each(v.begin(), v.end(), [](int n) { cout << n << endl; }
Run Code Online (Sandbox Code Playgroud)
([](int n)作为lambda函数).代替:
for(int i=0; i<v.size(); i++) { cout << v[i] << endl; }
Run Code Online (Sandbox Code Playgroud)
我希望这个问题似乎没有意义.我想这几乎问了一个更大的问题......应的中级程序员使用的语言特性,即使他并不真的需要在这个时候只是让他能够理解该功能的时候,实际上可能会受益非浅更好它.虽然可能已经提出了这个更大的问题(例如这里).
我相信C++标准std::sort并不能保证已经排序的列表上的O(n)性能.但是,我仍然想知道您是否知道STL(GCC,MSVC等)的任何实现std::is_sorted是否在执行排序算法之前进行检查?
问另一种方式,人们可以期望(在没有保证的情况下)std::sort在已排序的容器上运行会有什么性能?
旁注:我在我的博客上发布了 GCC 4.5的一些基准测试,并启用了C++ 0x.结果如下:

我想打印两个不同的东西,这取决于一个函数是静态调用Foo::print()还是来自一个实例Foo foo; foo.print();
编辑:这是一个绝对不起作用的类定义,已经有几个人回答了.
class Foo {
string bla;
Foo() { bla = "nonstatic"; }
void print() { cout << bla << endl; }
static void print() { cout << "static" << endl; }
};
Run Code Online (Sandbox Code Playgroud)
但是,有没有一种很好的方法来实现这种效果?基本上,我想做:
if(this is a static call)
do one thing
else
do another thing
Run Code Online (Sandbox Code Playgroud)
换句话说,我知道PHP可以检查是否*this定义了变量,以确定是否静态调用该函数.C++是否具有相同的功能?
我正在寻找一种方法来将代码作为DokuWiki中段落的一部分包含在内,就像我可以通过在StackOverflow中添加反引号转义一样like _so_.只需<code>bla</code>在自己的行上添加代码.
Emacs cc-mode似乎还没有识别enum classC++ 0x中引入的类型安全.我得到的结果是第二个,第三个等枚举的双缩进:
enum class Color {
Blue,
Red,
Orange,
Green
};
Run Code Online (Sandbox Code Playgroud)
我想要的是:
enum class Color {
Blue,
Red,
Orange,
Green
};
Run Code Online (Sandbox Code Playgroud)
你能推荐一个好的命令添加到.emacs哪个会使cc模式处理enum class它与处理普通旧模式的方式相同enum吗?
我实例化了一个std::vector foo(1000).
foo.size()现在是1000,foo.capacity()也是1000.
如果我清除矢量foo.clear(),size()现在是0,但是什么是capacity()?标准是否对此有所说明?