好吧,所以我最后一次以C++为生,std::auto_ptr所有的std lib都可用,而且boost::shared_ptr风靡一时.我从未真正研究过提供的其他智能指针类型.我知道C++ 11现在提供了一些类型的提升,但不是全部.
那么有人有一个简单的算法来确定何时使用哪个智能指针?优选地包括关于哑指针(诸如原始指针T*)和其他增强智能指针的建议.(像这样的东西会很棒).
在:http://www.learncpp.com/cpp-tutorial/19-header-files/
提到以下内容:
add.cpp:
int add(int x, int y)
{
return x + y;
}
Run Code Online (Sandbox Code Playgroud)
main.cpp中:
#include <iostream>
int add(int x, int y); // forward declaration using function prototype
int main()
{
using namespace std;
cout << "The sum of 3 and 4 is " << add(3, 4) << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我们使用了前向声明,以便编译器在编译时知道"
add"是什么main.cpp.如前所述,为要在其他文件中使用的每个函数编写前向声明可能会很快变得乏味.
你能进一步解释" 前瞻性宣言 "吗?如果我们在main()函数中使用它会有什么问题?
我知道Java没有指针,但我听说Java程序可以用指针创建,这可以由少数java专家完成.这是真的吗?
假设我有10,000行C++代码.此代码的200行用于测试目的(例如,检查程序并显示错误消息).
在C++中有没有办法忽略或考虑代码的某些行(可能有预处理器关键字)?
我多次被告知过这个问题.但我不知道为什么...从堆中分配内存时会涉及多少额外费用?它与硬件有关吗?它与CPU周期有关吗?如此多的猜测,但没有确切的答案......有人可以给我一些细节吗?
就像"放松"所说的那样,Heap数据结构比Stack更复杂.在我看来,一些内存空间在它开始运行时被分配给一个线程作为它的堆栈,而堆由进程内的所有线程共享.这种范例需要一些额外的机制来管理每个线程对共享堆的使用,例如垃圾收集.我对吗?
我试图通过在C++中编写python例程来加速它,然后使用ctypes或cython来使用它.
我是c ++的新手.我正在使用Microsoft Visual C++ Express,因为它是免费的.
我计划实现一个表达式树,以及一个以后缀顺序评估它的方法.
我遇到的问题是:
class Node {
char *cargo;
Node left;
Node right;
};
Run Code Online (Sandbox Code Playgroud)
我无法宣布left或right作为Node类型.
鉴于C++ 11标准现在得到了大多数体面编译器的良好支持,2014年使用原始指针的主要原因有哪些?
我确定了几个场景:
您正在扩展大量使用原始指针的遗留代码库,并且您希望保持样式的一致性.
您正在使用仅导出原始指针的库,但我猜您仍然可以使用强制转换.
您希望利用指针的功能来提供多个级别的间接.(我不太清楚C++ 11是否足以知道是否可以使用智能指针或使用其他技术来实现.)
您认为哪些其他场景适合使用指针?
你今天甚至会建议学习一般的指针吗?
c++ ×8
pointers ×5
c++-faq ×3
c++11 ×3
c ×2
copy-elision ×1
declaration ×1
java ×1
optimization ×1
stack ×1
unsafe ×1