在这样的定义里面
typedef struct
{
myType array[N];
} myStruct;
myStruct obj;
Run Code Online (Sandbox Code Playgroud)
我可以一直假设([编辑]假设正确的施法会发生,这不是这里问题的焦点[/ edit])
(&obj == &obj.array[0])
Run Code Online (Sandbox Code Playgroud)
将返回TRUE或我应该担心编译器引入额外的填充以适应myType对齐必需品?理论上这不应该发生,因为结构有一个单独的字段,但我不完全确定这一点.
我的问题很简单。当你想告诉编译器变量可以在它使用的范围之外改变时,关键字 volatile 是强制性的,例如嵌入式系统中的内存映射变量或可以响应接收信号而改变的信号处理程序变量。操作系统。[删除了关于线程通信的部分,因为它只会产生混乱,这不是我的问题]。[使用下面的评论重新表述问题以澄清]
我认为 OP 所问的是 volatile 是否会增加变量的全局性质尚未施加的进一步限制(事实上,它是全局的,对编译器施加了某些限制,类似于 volatile 强制要求的限制)。
#include <iostream>
struct slow_tag {};
struct fast_tag {};
template <typename T>
struct traits
{
typedef slow_tag tag;
};
template <>
struct traits<int>
{
typedef fast_tag tag;
};
template <typename T>
void work_dispatch(const slow_tag)
{
std::cout << "Slow function" << std::endl;
}
template <typename T>
void work_dispatch(const fast_tag)
{
std::cout << "Fast function" << std::endl;
}
template <typename T>
void work_dispatch(const T)
{
work_dispatch(typename traits<T>::tag());
}
int main()
{
std::cout << "Starting my program" << std::endl; …Run Code Online (Sandbox Code Playgroud)