问题标签 [language-lawyer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
9985 浏览

c - C 程序需要 main() 吗?

好吧,标题说明了一切。main()函数对于 C 程序来说是绝对必要的吗?

我问这个是因为我正在查看 Linux 内核代码,但我没有看到 main() 函数。

0 投票
1 回答
1410 浏览

c++ - 具有与另一个类同名的类静态方法

这是示例:

编译器错误是:

我在 Fedora 9 上使用 gcc 4.3.0。

有人可以解释为什么编译器会抱怨吗?如果可能,请参考标准中的参考资料。

谢谢

0 投票
5 回答
435 浏览

c++ - 如果它不是纯的,则使用虚拟成员函数?

C++03 3.2.2 ...如果对象或非重载函数的名称出现在可能求值的表达式中,则使用该对象或非重载函数。如果它不是纯的,则使用虚拟成员函数...

然后在后面3.2.3我们有:每个程序都应该包含该程序中使用的每个非内联函数或对象的一个​​定义;无需诊断。定义可以显式出现在程序中,可以在标准或用户定义库中找到,或者(在适当时)隐式定义(参见 12.1、12.4 和 12.8)。内联函数应在使用它的每个翻译单元中定义。

按照我正在阅读的内容:不使用纯虚函数。ODR 仅适用于使用的功能。这是否意味着以下内容是合法的?我猜答案是否定的,它没有,但我不明白为什么。

0 投票
5 回答
5877 浏览

c++ - 纯虚函数可能没有内联定义。为什么?

纯虚函数是那些具有纯说明符( = 0;)的虚成员函数

C++03 的第 10.4 条第 2 段告诉我们什么是抽象类,作为旁注,如下:

[注意:函数声明不能​​同时提供纯说明符和定义——尾注] [示例:

——结束示例]

对于那些不太熟悉这个问题的人,请注意纯虚函数可以有定义,但上述条款禁止此类定义出现内联(词法类内)。(对于定义纯虚函数的用途,您可能会看到,例如,这个 GotW

现在对于所有其他种类和类型的函数,它可以提供一个类内定义,而且这个限制乍一看似乎是绝对人为的和莫名其妙的。想想看,第二眼和随后的一瞥似乎都是这样 :) 但我相信如果没有具体原因,限制就不会存在。

我的问题是:有人知道这些具体原因吗?也欢迎好的猜测。

笔记:

  • MSVC 确实允许 PVF 具有内联定义。所以不要惊讶:)
  • 这个问题中的词inline不是指inline关键字。它应该是词汇上的意思
0 投票
5 回答
745 浏览

c - 这种对非原型函数声明的可疑使用是否有效?

这是有效的 C (C99) 代码吗?

g显然,如果程序使用负参数调用并且f不是带有单个int参数的函数,或者如果g使用非负参数调用并且f不是带有两个参数的函数,则程序具有未定义的行为int。然而在其他方面?

以这个单独的源文件为例,它g从上面调用并提供f

0 投票
2 回答
1066 浏览

c++ - 定义具有不同签名的函数

今天我发现可以在具有一个签名的头文件中声明一个函数,并在具有不同(相似)签名的源文件中实现它。例如,像这样:

这是允许的吗?或者这是编译器的扩展(我使用的是 g++ 4.3.0)?

编辑 我正在以迂腐和最大可能的警告级别进行编译,但我仍然没有收到警告或错误。

0 投票
2 回答
3780 浏览

c++ - std::map 的类型要求

今天我创建了一个映射,其中值类型没有默认构造函数。我很惊讶我无法使用 operator[] 将元素插入此地图,但我不得不使用 insert 方法。

那么,对于 std::map 的键和值类型到底有什么要求呢?

这是一个简短的例子:

我是这样编译的:

0 投票
3 回答
391 浏览

c++ - C++ 标准中未定义行为段落中的 [Note] 是什么意思?

正如用户 Tony 指出的那样,C++ 标准的第 1.3.12 段中有一个 [Note] 说

允许的未定义行为的范围从完全忽略具有不可预测结果的情况,到在翻译或程序执行期间以环境特征的记录方式表现......

这是否与 UB 的定义相矛盾,即……本国际标准没有要求?我的意思是他们说“没有要求”,然后说“允许的 UB”——就在同一段中。

应该如何解释这个注释?它确实以任何方式限制了UB吗?

0 投票
1 回答
2895 浏览

c++ - 引用基类时是否需要命名空间

我有这样的代码:

我是否需要 Derived 引用它的基类的命名空间限定符?GCC 和 MSVC 对编写的代码很满意,但是除非我将命名空间放入,否则另一个编译器会抱怨。C++ 标准是怎么说的?

0 投票
7 回答
4695 浏览

c++ - C++ 标准究竟在哪里说取消引用未初始化的指针是未定义的行为?

到目前为止,我找不到如何推断以下内容:

是未定义的行为。

首先,有 5.3.1/1 声明这*意味着间接转换T*T. 但这并没有说明UB。

然后经常引用 3.7.3.2/4 说,在非空指针上使用释放函数会使指针无效,然后无效指针的使用是 UB。但在上面的代码中,没有关于释放的内容。

上面的代码中如何推导出UB?