在SO上阅读问题,评论和答案,我一直听说MSVC没有正确地实现两阶段模板查找/实例化.
据我所知,到目前为止,MSVC++只对模板类和函数进行了基本的语法检查,并没有检查模板中使用的名称是否至少被声明了或者沿着这些行.
它是否正确?我错过了什么?
在boost库中,通常有包含库的示例:
#pragma once
#include <boost/property_tree/ptree.hpp>
using boost::property_tree::ptree;
Run Code Online (Sandbox Code Playgroud)
在我的整个程序中,我一直在导入这样的命名空间:
#include "../MyClass.h"
using namespace MyClassNamespace;
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下:
using和之间的区别using namespace;using namespace利于什么的优点using;using和using namespace;谢谢
我一直在读Exceptional C++ by Herb Sutter.到达时Item 32
我找到了以下内容
namespace A
{
struct X;
struct Y;
void f( int );
void g( X );
}
namespace B
{
void f( int i )
{
f( i ); // which f()?
}
}
Run Code Online (Sandbox Code Playgroud)
这个f()调用自身,具有无限递归.原因是唯一可见的f()是B :: f()本身.
还有另一个带有签名f(int)的函数,即命名空间A中的函数.如果B写了"使用命名空间A"; 或者"使用A :: f;",当查找f(int)时,A :: f(int)将作为候选者可见,并且f(i)调用在A :: f之间是不明确的( int)和B :: f(int).由于B没有将A :: f(int)带入范围,因此只能考虑B :: f(int),因此调用明确地解析为B :: f(int).
但是当我做了以下......
namespace A
{
struct X;
struct Y;
void f( int );
void g( X ); …Run Code Online (Sandbox Code Playgroud)