xml*_*lmx 0 c++ const reference linkage visual-c++
几行代码值得千言万语:
我有三个简单的文件:header.h,main.cpp,other.cpp
// header.h
#pragma once
inline const int& GetConst()
{
static int n = 0;
return n;
}
const int& r = GetConst();
// main.cpp
#include "header.h"
int main()
{
return 0;
}
// other.cpp
#include "header.h"
Run Code Online (Sandbox Code Playgroud)
在编译最简单的项目时,VC++ 2010抱怨如下:
ClCompile:
other.cpp
main.cpp
Generating Code...
other.obj : error LNK2005: "int const & const r" (?r@@3ABHB) already defined in main.obj
D:\Test\Debug\bug.exe : fatal error LNK1169: one or more multiply defined symbols found
Build FAILED.
Time Elapsed 00:00:00.29
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Run Code Online (Sandbox Code Playgroud)
我确信这是VC++ 2010的一个错误,因为以下两个引用:
1,C++标准说:(在n3126的第140页)
"声明为const且未明确声明为extern的对象具有内部链接."
2,MSDN说:(见:http://msdn.microsoft.com/en-us/library/357syhfh(VS.80).aspx)
"在C中,常量值默认为外部链接,因此它们只能出现在源文件中.在C++中,常量值默认为内部链接,这允许它们出现在头文件中.
const关键字也可用于指针声明."
Jam*_*lis 10
您引用C++标准的段落(C++ 03 7.1.1/6):
声明
const且未显式声明的对象extern具有内部链接.
您尚未声明对象.您已声明了参考.引用不是对象.那就是说,3.5/3说:
具有命名空间作用域的名称具有内部链接,如果它是显式声明为const的对象或引用的名称,并且既未显式声明
extern也未声明为具有外部链接
但是,8.3.2/1说:
符合Cv标准的参考文献是不正确的
因此,虽然const限定引用将具有内部链接,但是不可能对引用进行const限定.
示例程序中的引用不是const限定的,它是对const限定的引用int.
| 归档时间: |
|
| 查看次数: |
178 次 |
| 最近记录: |