198得票5回答
为什么默认模板参数只允许在类模板中使用?

为什么只允许在类模板中使用默认模板参数?为什么不能在成员函数模板中定义默认类型?例如: struct my_class { template<class T = int> void mymember(T* vec) { // ... } }; 相反,C++...

123得票6回答
C++中的异常真的很慢吗?

我正在看Systematic Error Handling in C++—Andrei Alexandrescu,他声称C++中的异常非常非常慢。 对于C++98来说,这个说法还有效吗?

95得票3回答
默认初始化、值初始化和零初始化混淆问题

我非常困惑于值初始化、默认初始化和零初始化。特别是当它们在不同的标准(C++03、C++11和C++14)中启用时。我在引用并扩展一个真正好的答案Value-/Default-/Zero- Init C++98 and C++03,以使其更加通用,因为如果有人可以帮助填补所需的空白,那么它将对...

46得票2回答
常量对象的向量导致编译错误

我在我的代码中声明了以下内容vector <const A> mylist; 我得到了以下编译错误 - new_allocator.h:75: error: `const _Tp* __gnu_cxx::new_allocator<_Tp>::address(cons...

32得票1回答
为什么C++中的"using namespace"能够按照其工作方式进行操作?

所有学生对C++的using-directives行为感到惊讶。考虑以下代码片段(Godbolt):namespace NA { int foo(Zoo::Lion); } namespace NB { int foo(Zoo::Lion); namespace NC ...

31得票1回答
C++中初始化静态数据成员的正确方式是什么?(适用于C++98、11和14)

在C++中,如何正确地初始化static数据成员?我还想了解它从C++98到C++11再到C++14是如何变化的。 这里有一个例子:// bufferedOutput.h class BufferedOutput { // Static member declaration. stati...

29得票1回答
为什么在C++11中std::list更大?

使用这段代码: #include <iostream> #include <list> int main() { std::cout << sizeof(std::list<void*>) << std::endl; };...

27得票4回答
返回一组值的接口

我有一个函数,它接受一个数字并返回最多那么多个东西(比如整数)。最清晰的接口是什么?一些想法: 返回一个vector<int>。该向量将被多次复制,这是低效的。 返回一个vector<int>*。现在我的getter必须自己分配向量以及元素。有所有通常的问题,比如谁...

22得票3回答
为什么向临时字符串流对象中写入数据只会打印对象地址?

以下是我使用的记录器的简化版本。它扩展了std::ostringstream,可以使用<<运算符进行填充。在销毁时,所有内容都将写入std::cout。 直接将内容(<<)写入临时对象Logger()中,我期望它会打印该输入,但实际上它只打印了std::cout上某个...

20得票4回答
向量和双端队列中删除项目的时间复杂度

我读到过这样的说法,向一个 std::vector 的末尾添加项的时间复杂度是摊销常数,向 std::deque 的顶部和底部插入项的时间复杂度是常数。由于这两个容器都有随机访问迭代器,因此访问任何索引处的元素的时间复杂度都是常数。如果我在上述论述中有任何错误,请告诉我。我的问题是,如果访问 ...