我经常在C++面试问题中看到以下术语:
我不确定这些术语之间的区别是什么.有人可以提供清晰简洁的解释吗?
编辑:上下文问题是:" 当你删除指针两次时会发生什么? "但是知道这些术语之间的差异对我来说比对答案更重要.
我试图玩BOOST_FUSION_ADAPT_STRUCT宏并尝试一些天真的东西,如使用Fusion打印任意结构.
从文档中给出的示例代码开始,我无法在我的自适应结构上执行融合序列允许的一些操作.
#include <boost/fusion/adapted.hpp>
#include <boost/fusion/sequence/io/out.hpp>
#include <boost/fusion/sequence/intrinsic.hpp>
#include <boost/fusion/view.hpp>
#include <iostream>
namespace fuz = boost::fusion;
namespace demo
{
struct employee
{
std::string name;
int age;
};
}
// demo::employee is now a Fusion sequence
BOOST_FUSION_ADAPT_STRUCT(
demo::employee,
(std::string, name)
(int, age))
int main()
{
// tried to initialize an employee like a fusion sequence
// but it didnt work
// demo::employee e("bob", 42);
demo::employee e;
e.name = "bob";
e.age = 42;
// Access struct members with …Run Code Online (Sandbox Code Playgroud) 我编写了一个类似于解析CSV格式文件的迭代器的类.我还编写了其他类来读取特定的csv文件以直接填充MyObject结构.因此可以像这样使用类(我删除了代码的错误处理部分):
std::ifstream in(filename);
MyObjectParser parser(in);
MyObjectParser::Iterator it;
for (it = parser.begin(); it != parser.end(); it++)
{
MyObject b = *it;
// do some stuff here ...
}
Run Code Online (Sandbox Code Playgroud)
该程序运行良好,我很满意它,但我意识到迭代器的隐含意义(仅对我自己?)是迭代一个集合.在这种情况下,没有集合而是流.
我是否应该更喜欢一个明确建议我通过重载>>运算符使用流的表单,从而得到类似的东西:
std::ifstream in(filename);
MyObjectReader reader(in);
MyObject obj;
while(reader >> obj)
{
// do the same "some stuff" here...
}
Run Code Online (Sandbox Code Playgroud)
这只是品味问题吗?我没有清楚地看到有什么区别(除了在第二种形式中对象只是填充而不是复制)以及选择第一种或第二种形式的后果是什么.
我很乐意得到一些其他的意见,以便确切地知道为什么我使用的是解决方案而不是另一种解决方案.
我有一个自定义记录器类,具有调试,信息等消息的不同方法.除了日志消息,我还要打印调用记录器方法的文件的名称和行,以及时间戳.
我现在的解决方案是这样的:
m_logger.debug("some debug message", __FILE__ , __LINE__, __TIME__);
Run Code Online (Sandbox Code Playgroud)
问:有没有一种方法,以避免两个宏的号召__FILE__,__LINE__并__TIME__和实施somewho使得它被自动调用?
谢谢.
隐藏使用引用的setter的指针成员是一件好事吗?
class Foo
{
Bar* m_ptr;
public :
void setBar(Bar& bar){m_ptr = &bar;}
};
Run Code Online (Sandbox Code Playgroud)
或者最好在setter中公开引用对象的真实类型(以及为什么)?
void setBar(Bar* bar){m_ptr = bar;}
Run Code Online (Sandbox Code Playgroud)
事实上,我正在使用不是"引用友好"的stl竞争者,因此我将指针的向量作为类成员但我更喜欢处理引用的方法.这样做是件坏事吗?
编辑:
存储的成员是指针,这个例子更适合我的问题:
class Foo
{
std::vector<FooObserver *> m_observers;
public :
Run Code Online (Sandbox Code Playgroud)
你更喜欢这个:
void addObserver(FooObserver* obs);
Run Code Online (Sandbox Code Playgroud)
或这个 :
void addObserver(FooObserver& obs);
Run Code Online (Sandbox Code Playgroud)
?
在这两种情况下,指针永远不应该为NULL,我认为这是调用者对象的责任.
c++ ×6
boost-fusion ×1
iterator ×1
logging ×1
operators ×1
pointers ×1
reference ×1
stream ×1
terminology ×1
typedef ×1