使用命名空间std?

时间:2018-03-21 16:39:59

标签: c++ namespaces

我在代码的顶部包含了行using namespace std;。现在考虑声明int a,b,c;。上面的代码是否等同于int std::a,std::b,std::c;?如果是这样,请考虑以下示例:

如果我在行Hi之后声明(定义)了一个名称空间using namespace std;Histd的一部分,即...,我应该使用Hi作为std::Hi吗?

我是初学者。

2 个答案:

答案 0 :(得分:10)

  

上面的代码相当于int std::a,std::b,std::c;

没有。 using namespace语句意味着您的代码可以使用该命名空间的成员,而无需使用命名空间的名称限定它们。

例如,假设您有#include <string>语句后跟using namespace std;语句。然后,您可以将std::string类称为string,而不是{。}}。

或者,假设您有#include <iostream>语句后跟using namespace std;语句。然后,您可以分别将std::cinstd::cout个对象称为cincout

简单地using命名空间不会向该命名空间添加任何内容。这是一种将指定命名空间中的内容带入调用命名空间的方法。

  

如果我在行Hi之后声明(定义)了一个名称空间using namespace std;Histd

的一部分

没有。为此,Hi必须在namespace std块内声明,例如:

namespace std {
    namespace Hi {
        ...
    }
}

但是,that is undefined behavior (except in special cases),因为通常不允许您向std命名空间添加内容。

答案 1 :(得分:1)

不,不需要std。您声明的变量不在std命名空间中。 cout通常包含公共语言工具,例如cinstringprivate func showChildView() { let childViewController = UIViewController() let parentViewController = self childViewController.view.backgroundColor = .brown parentViewController.addChildViewController(childViewController) let parentView = parentViewController.view! let childView = childViewController.view! //For programatically created view set the translatesAutoresizingMaskIntoConstraints = false childView.translatesAutoresizingMaskIntoConstraints = false parentView.addSubview(childView) childView.centerXAnchor.constraint(equalTo: parentView.centerXAnchor).isActive = true childView.centerYAnchor.constraint(equalTo: parentView.centerYAnchor).isActive = true childView.widthAnchor.constraint(equalToConstant: 100).isActive = true childView.heightAnchor.constraint(equalToConstant: 200).isActive = true childViewController.didMove(toParentViewController: parentViewController) } 等。