为什么我的日志位于 std 命名空间中?

2023-12-13

在下面的代码中,我定义了一个简单的log功能。在main I try not调用它;我打电话std::log。尽管如此,我自己的log叫做;我看到“日志!”在屏幕上。有谁知道为什么?我使用 G++ 4.7 和 clang++ 3.2。

#include <iostream>
#include <cmath>

double log(const double x) { std::cout << "log!\n"; return x; }

int main(int argc, char *argv[])
{
  std::log(3.14);
  return 0;
}

C++ 标准 17.6.1.2 第 4 段(强调我的):

除第 18 条至第 30 条和附录 D 中注明的情况外,每个标头的内容cname应与相应的标头相同name.h,如 C 标准库 (1.2) 或 C Unicode TR 中所指定(视情况而定),就像通过包含一样。然而,在 C++ 标准库中,声明(除了在 C 中定义为宏的名称)位于命名空间的命名空间范围 (3.3.6) 内std. 未指定这些名称是否首先在全局命名空间范围内声明,然后注入命名空间std通过显式使用声明(7.3.3)。

g++ 采用后一种方式,以便 C 和 C++ 可以重用一些相同的头文件。所以g++允许声明和定义double log(double)在全局命名空间中。

第 17.6.4.3.3 节第 3 和第 4 段:

使用外部链接声明的标准 C 库中的每个名称都保留给实现,以用作以下名称:extern "C"链接,都在命名空间中std并在全局命名空间中。

使用外部链接声明的标准 C 库中的每个函数签名都保留给实现,以用作具有以下两者的函数签名:extern "C" and extern "C++"链接,或作为全局命名空间中的命名空间范围的名称。

第 17.6.4.3 节第 2 段顶部:

如果程序在保留名称的上下文中声明或定义名称,除非本条款明确允许,否则其行为是未定义的。

另一方面,你可能not声明或定义::log以任何方式。

不过,遗憾的是 g++ 工具链没有给您任何错误消息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的日志位于 std 命名空间中? 的相关文章

  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么

随机推荐

  • 当传递给函数时,如何强制警告使用错误大小的数组?

    假设您有一个以字符串作为参数的函数 void foo char arg 如果我们确定数组 不要与字符串长度混淆 谢谢 chux 将始终具有一定的大小 假设为 8 那么我们可以这样做 void bar char arg 8 然后这样称呼它 c
  • 聚合物 3 - 谷歌地图

    我想知道如何将 Google 地图包含在 Polymer 3 中 我刚刚从 Polymer 2 升级到 Polymer 3 这是我的示例 不是入门套件的工作基础 import PolymerElement html from polymer
  • 构建 QGIS 时未解析的符号

    我已经能够从这一步取得进展 在 Windows 7 上构建 QGIS 源代码 不工作 我正在尝试使用 Visual Studio 10 Express 构建最新的 QGIS 2 10 1 但在构建 ALL BUILD 时获取这些未解析的符号
  • 我在每个工作表的 VBA 循环中搞砸了什么?

    目前 我必须一次发送多封信件 并且通常只替换单元格中的一两个单词 问题是我需要将这些单词加粗 并且在 150 个工作表上单独使用这个宏会很乏味 我对编码非常陌生 并尝试在线搜索以编辑此代码以循环所有工作表 但我尝试的所有操作似乎只会更改我所
  • 频繁地在 ObjectOutputStream 上调用 reset() 可以吗?

    我读过一些让我不确定并寻找替代方法的地方 是否打电话reset 太频繁会导致网络紧张 还是不必要的 我正在使用 TCP 通过 ObjectOutputStream 发送对象 对象值在再次写入之前会发生更改 现在相同的对象但包含不同的值 没有
  • Spring boot - 发生非法反射访问操作

    我向演示应用程序添加了两个新的依赖项 即 spring 集成和 spring 集成文件 之后我在控制台中收到以下警告 应用程序工作正常 但它困扰着我 我怎样才能克服这个问题 WARNING Illegal reflective access
  • 使用向左和向右箭头键选择上一个/下一个菜单而不是下一个/上一个菜单

    在完整的应用程序中注意到 但在简单的演示中可以完全重现 我有一个MenuStrip包含三个菜单 A B and C 每个菜单包含三个项目 A1 A2 C2 C3 When I press Alt the first menu A becom
  • 如何在javascript中比较两个日期时间?

    我尝试通过 C 的 JSON 解析创建标记 我有一个关于 javascript 中的日期时间比较的小问题 var nowDate new Date var LastTenMin new Date nowDate getFullYear no
  • 尝试运行工作表更改事件两次

    我正在尝试为两个不同的列 A 和 I 运行此工作表更改事件 Private Sub Worksheet Change ByVal Target As Range Dim A As Range B As Range Inte As Range
  • 在哪里可以找到 iPhone 系统按钮和图标图形?

    我正在尝试找到一种在网站中使用原始 Apple 系统按钮和图标的方法 有没有办法把这些原始图形变成png格式 当然 获得它们的方法并不太好 我想到的有两个 将他们从这个链接 然后转换为png 在 iPhone 上截取屏幕截图 然后从保存的图
  • 将材料 UI 选项卡与 React 一起使用

    我偶然发现的是了解如何使用 Material UI 选项卡 我发现了很多帖子 但每个帖子都针对不同版本的材料 UI 并且每个帖子都给出了完全不同的实现方式 我创建的 Web 应用程序是一个分析仪表板 我的页面上有 3 个部分 应用栏 主体
  • 在Python中声明静态方法是否需要@staticmethod装饰器?

    我很好奇为什么我们需要 staticmethod装饰器将方法声明为静态 我正在阅读有关 Python 中的静态方法的内容 并且我了解到静态方法可以在不实例化其类的情况下进行调用 所以我尝试了下面的两个示例 但两者的作用相同 class St
  • 尝试使用 Dagger2 了解 Android 上的依赖注入

    我有以下代码工作 某类 public class SomeClass Inject Named special OkHttpClient mOkHttpClient public SomeClass Activity activity My
  • 访问模型中的设备 current_user

    您好 我正在尝试访问模型中的 current user 以便使用 find or create by 动态创建元素 以下是我的模型中的方法 def opponent name name self opponent Opponent find
  • Android JNI:32 位与 64 位设备的兼容性?

    我有一些使用本机组件的库 这些库是使用 NDK 为 32 位 Arm 架构构建的 现在我们在现代设备上拥有 64 位处理器 所以我想知道这些库是否可以工作 在我的情况下 我没有本机库的源代码文件 只有 SO 文件 我无法为 64 位构建它们
  • 如何计算图像中不规则物体的面积(opencv)?

    So I have this image 我需要计算特定部分的面积 所以我编写了以下代码 packages from imutils import perspective from imutils import contours impor
  • 在 MATLAB 中总结 Dice

    我的函数 RollDice 模拟给定数量的六面骰子滚动给定的次数 该函数有两个输入参数 即每次实验中掷骰子的数量 NumDice 和掷骰子的总次数 NumRolls 该函数的输出将是长度为 NumRolls 的向量 SumDice 其中包含
  • ReferentialConstraint 中的依赖属性映射到存储生成的列

    写入数据库时 出现此错误 ReferentialConstraint 中的依赖属性映射到 存储生成的列 列 付款 ID public bool PayForItem int terminalId double paymentAmount e
  • UTF-8 字符集不适用于 javax.mail

    我用过Java 邮件 API 用于发送电子邮件 我正在使用联系人公式发送输入 该输入必须发送到特定的电子邮件 尽管我是丹麦人 但电子邮件发送没有问题 因此我需要在主题和电子邮件文本中使用三个丹麦字符 即 和 因此 我发现我可以使用 UTF
  • 为什么我的日志位于 std 命名空间中?

    在下面的代码中 我定义了一个简单的log功能 在main I try not调用它 我打电话std log 尽管如此 我自己的log叫做 我看到 日志 在屏幕上 有谁知道为什么 我使用 G 4 7 和 clang 3 2 include