在与"变量模板"相关的一些调查中,我发现了一些奇怪的代码行为.标准是否说明了这种行为?
//Header.h
#pragma once
template<typename T>
auto myvar = []() -> T&{
static T v;
return v;
};
//Source.cpp
#include <iostream>
#include "Header.h"
void testFunction()
{
std::cout << myvar<int>() << '\n';
}
//main.cpp
#include <iostream>
#include "Header.h"
void testFunction();
int main(int argc, char **argv)
{
myvar<int>() = 10;
testFunction();
std::cout << myvar<int>() << '\n';
}
Run Code Online (Sandbox Code Playgroud)
输出:
0
10
Run Code Online (Sandbox Code Playgroud)
我预计:
10
10
Run Code Online (Sandbox Code Playgroud)