可能的重复: #include <filename>和#include " filename "有什么区别?
在c++中包含头文件时,尖括号< >和双引号" "之间有什么区别?
我的意思是哪些文件应该包括使用eg: #include <QPushButton>和哪些文件将包括使用eg: #include“MyFile.h”??
可能的重复: #include <filename>和#include " filename "有什么区别?
在c++中包含头文件时,尖括号< >和双引号" "之间有什么区别?
我的意思是哪些文件应该包括使用eg: #include <QPushButton>和哪些文件将包括使用eg: #include“MyFile.h”??
像许多人一样,这些天我一直在尝试c++ 11带来的不同特性。我最喜欢的是“基于范围的for循环”。
我明白:
for(Type& v : a) { ... }
等价于:
for(auto iv = begin(a); iv != end(a); ++iv)
{
Type& v = *iv;
...
}
begin()只是返回标准容器的a.begin()。
但是如果我想让我的自定义类型“基于范围的for循环”感知呢?
我应该专门化begin()和end()吗?
如果我的自定义类型属于命名空间xml,我应该定义xml::begin()或std::begin() ?
简而言之,这样做的指导方针是什么?
class my_class
{
...
my_class(my_class const &) = delete;
...
};
在这种情况下= delete是什么意思?
是否有其他“修饰符”(除了= 0和= delete)?
可能的重复: Pimpl: shared_ptr或unique_ptr 智能指针(增强)解释
有人能解释shared_ptr和unique_ptr之间的差异吗?
所以,在看了这个关于右值引用的精彩讲座后,我认为每个类都将受益于这样一个“移动构造函数”,模板<类T> MyClass(t&&other)编辑,当然还有一个“移动赋值操作符”,模板<类T> MyClass& operator=(t&&other),菲利普在他的回答中指出,如果它有动态分配的成员,或者通常存储指针。就像你应该有一个复制函数,赋值操作符和析构函数,如果前面提到的点适用。 想法吗?
我开始研究c++ 11的智能指针,我没有看到std::weak_ptr有任何有用的用途。有人能告诉我什么时候std::weak_ptr是有用的/必要的吗?
当一个函数接受一个shared_ptr(来自boost或c++ 11 STL)时,你是否传递它:
foo(const shared_ptr<T>& p) 或通过值:void foo(shared_ptr<T> p) ?
我更喜欢第一种方法,因为我怀疑它会更快。但这真的值得吗,还有其他问题吗?
你能否给出你选择的原因,或者如果是这样,为什么你认为这无关紧要。
std::shared_ptr<Object> p1 = std::make_shared<Object>("foo");
std::shared_ptr<Object> p2(new Object("foo"));
许多谷歌和stackoverflow的帖子都在这里,但我不明白为什么make_shared比直接使用shared_ptr更有效。
有人能一步一步地向我解释创建的对象序列和两者所做的操作,这样我就能理解make_shared是如何高效的。我在上面举了一个例子供大家参考。
我试图构造一个std::线程的成员函数,不接受参数并返回void。我想不出任何可行的语法——无论如何编译器都会抱怨。实现spawn()以返回执行test()的std::线程的正确方法是什么?
#include <thread>
class blub {
void test() {
}
public:
std::thread spawn() {
return { test };
}
};
在我看来,拥有一个“总是返回5的函数”破坏或稀释了“调用函数”的意义。必须有一个原因,或者需要这个功能,否则它就不会出现在c++ 11中。为什么会在那里?
// preprocessor.
#define MEANING_OF_LIFE 42
// constants:
const int MeaningOfLife = 42;
// constexpr-function:
constexpr int MeaningOfLife () { return 42; }
在我看来,如果我写一个函数,返回一个字面值,然后我进行代码检查,有人会告诉我,我应该声明一个常量值,而不是返回5。