相关疑难解决方法(0)

使用Microsoft Visual C++的两阶段模板实例化到底是什么"打破"?

在SO上阅读问题,评论和答案,我一直听说MSVC没有正确地实现两阶段模板查找/实例化.

据我所知,到目前为止,MSVC++只对模板类和函数进行了基本的语法检查,并没有检查模板中使用的名称是否至少被声明了或者沿着这些行.

它是否正确?我错过了什么?

c++ templates instantiation visual-c++

37
推荐指数
4
解决办法
4828
查看次数

'使用'和'使用命名空间'之间的区别

在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)

有人可以解释一下:

  1. using和之间的区别using namespace;
  2. 否定使用有using namespace利于什么的优点using;
  3. 前瞻性的差异usingusing namespace;

谢谢

c++ namespaces

15
推荐指数
2
解决办法
7551
查看次数

特殊的C++ [Bug]?

我一直在读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)

c++

12
推荐指数
1
解决办法
450
查看次数

标签 统计

c++ ×3

instantiation ×1

namespaces ×1

templates ×1

visual-c++ ×1