从我的示例程序看,在两种情况下看起来都会调用析构函数.它在什么时候调用全局变量和类静态变量的析构函数,因为它们应该在程序堆栈的数据部分中分配?
这是一个问题:编写一个交换两个变量的方法.这两个变量应该是原始的.它不需要是通用的,例如两个int变量.有办法吗?!
考虑这个简单的例子:
template <class Type>
class smartref {
public:
smartref() : data(new Type) { }
operator Type&(){ return *data; }
private:
Type* data;
};
class person {
public:
void think() { std::cout << "I am thinking"; }
};
int main() {
smartref<person> p;
p.think(); // why does not the compiler try substituting Type&?
}
Run Code Online (Sandbox Code Playgroud)
转换运算符如何在C++中工作?(即)编译器何时尝试替换转换运算符后定义的类型?
两年前我开始上大学,从那时起我一直听到"先设计你的课程".我有时会问自己,如果我的解决方案首先应该是一堆对象!有人说你没有看到它的好处,因为你的代码库非常小 - 大学项目.项目规模的借口只是不要沮丧.如果解决方案适合项目,我相信它也应该是正确的项目的宏版本.
我并不是说OOP是坏的,我只是觉得它在课堂上被滥用,像我这样的学生日夜被告知OOP是正确的方式.
恕我直言,正确的答案不应该来自教授,我更愿意从现场的真正工程师那里听到.
OOP总是正确的方法吗?
OOP何时是最好的方法?
OOP什么时候不好?
这是一个非常普遍的问题.我不是要求明确的答案,只是来自该领域的一些真实的设计经验.
我不关心表现.我在问设计.我知道这是现实生活中的工程.
================================================== ================================
感谢所有的贡献.我选择了Nosredna的答案,因为她总体上解决了我的问题,并且说服了我对以下内容的错误: 如果解决方案适合项目,我相信它应该是正确的项目的宏版本.
这不是什么是装箱和拆箱的问题,而是为什么像Java和C#这样的语言需要呢?
我非常熟悉C++,STL和Boost.
在C++中,我可以很容易地写出这样的东西,
std::vector<double> dummy;
Run Code Online (Sandbox Code Playgroud)
我有一些Java经验,但我真的很惊讶,因为我必须写这样的东西,
ArrayList<Double> dummy = new ArrayList<Double>();
Run Code Online (Sandbox Code Playgroud)
我的问题,为什么它应该是一个对象,在谈论泛型时,在技术上如此难以包含原始类型?
Smalltalk OOP和Simula OOP之间是否存在哲学差异?
这是一个间接与Java&C#vs C++相关的问题.据我所知,C++基于Simula,但Java和C#或多或少来自Smalltalk系列.
我想知道C/C++标准库中使用的命名约定是否有一个名称,或者至少是一个可以查找规则的备忘单.例如
push_back -- underscore used
setstate -- but not used here!
string::npos -- when to use abbreviations?
fprintf
...
Run Code Online (Sandbox Code Playgroud)
C/C++标准库中使用的命名约定是否具有特定名称?
标题说明了一切.我特别谈论C/C++,因为他们都认为这是"实施问题".我认为,定义标准接口可以轻松构建模块系统,以及许多其他好东西.
如果他们定义了标准的ABI,C/C++会"丢失"什么?
我有兴趣学习Qt.我对C++,STL和Boost相当不错.我非常喜欢STL/Boost风格,每当我能在uni项目中使用C++时我都会使用它们.但是,我总是想念GUI.在我的案例中,Qt似乎是最好的解决方案.Qt确实有很好的容器集合,但我非常熟悉STL/Boost的东西.
在学习Qt并与STL/Boost并排使用时,我应该注意什么?
是否有一个标准来访问的底层容器的方式stack,queue,priority_queue?
我发现了一个叫方法:_Get_container()在VS2008实施stack和queue,但没有一个priority_queue!我认为它不是标准的.
另外,我知道这是一个愚蠢的问题!我在哪里可以找到标准库的官方文档?
仅仅为了澄清,我并没有试图弄乱底层容器.我试图做的就是:
template <class Container>
std::ostream& printOneValueContainer(std::ostream& outputstream, Container& container)
{
Container::const_iterator beg = container.begin();
outputstream << "[";
while(beg != container.end())
{
outputstream << " " << *beg++;
}
outputstream << " ]";
return outputstream;
}
// stack, queue
template
< class Type
, template<class Type, class Container = std::deque<Type> > class Adapter
>
std::ostream& operator<<(std::ostream& outputstream, const Adapter<Type>& adapter) …Run Code Online (Sandbox Code Playgroud)