我知道不允许修改常量对象的状态,但是为什么析构函数可以更改此状态?
class A
{
public:
~A()
{
i = 2; //?
}
void test() const
{
//i = 1; //Not allowed
}
int i = 0;
};
int main()
{
const A o;
o.test();
}
Run Code Online (Sandbox Code Playgroud) 在与"变量模板"相关的一些调查中,我发现了一些奇怪的代码行为.标准是否说明了这种行为?
//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) 我尝试编译库并获取“ DWARF with dSYM File”格式的调试符号。这适用于动态库,但不适用于静态库。
XCode“快速帮助”说,“不需要dSYM文件,也不会为静态库或目标文件产品创建dSYM文件。[dwarf-with-dsym]”
谁能解释为什么?
谢谢
例如,我有下一个代码:
int func()
{
int i = 0;
int j = 0;
auto lambda{[&](){ return i; }};
return lambda();
}
Run Code Online (Sandbox Code Playgroud)
是否j也将通过引用捕获或lambda仅捕获其使用的对象?