【发布时间】:2018-07-24 02:33:59
【问题描述】:
我有一个小玩具程序:
static int value = 0;
int function(int &value=value) {
return value;
}
int main() {
function();
}
使用 g++ 7.2 编译:
g++ -std=c++11 -Wall -Wextra test.cc -o test
没问题。
用clang++-3.9编译:
clang++-3.9 -std=c++11 -Wall -Wextra test.cc -o test
test.cc:3:25: error: default argument references parameter 'value'
int function(int &value=value) {
^~~~~
test.cc:8:5: error: no matching function for call to 'function'
function();
^~~~~~~~
test.cc:3:5: note: candidate function not viable: requires single argument 'value', but no arguments were provided
int function(int &value=value) {
^
2 errors generated.
卡布姆。谁是对的?
【问题讨论】:
-
int function(int &value=value)对我来说真的很奇怪。我将其更改为int function(int &value = ::value),因此它指的是全局value,而不是绑定到自身的引用。 -
@Eljay
gcc将其绑定到全局value和int& value = value,但我认为按照当前标准是错误的。 -
只是好奇-当您运行 gcc 时,本地值的值是多少? (哦,天哪,这个问题都错了)......
-
从你可以在默认参数中使用
decltype(param)的事实来看,我会说参数名称在范围内并且GCC是错误的,但这不是一个非常强大的基础。 -
@UKMonkey Apparently 是
::value的实际值,即引用不绑定到自身。
标签: c++ c++11 gcc clang language-lawyer