标签: observable-behavior

在C++中打印空字符串可观察行为?

在C++ 03中,标准可观察行为(1.9/6)包括对库I/O函数的调用.现在我有这个代码:

printf( "" );
Run Code Online (Sandbox Code Playgroud)

这正式调用了库I/O函数,但没有任何效果.

这是可观察的行为吗?是否允许编译器消除它?

c++ state language-lawyer observable-behavior

11
推荐指数
1
解决办法
738
查看次数

程序状态的任何变化是否构成可观察的行为?

考虑以下两个程序:

程序之一

int main()
{
   printf( "hello\n" );
}
Run Code Online (Sandbox Code Playgroud)

计划二

int main()
{
   srand( 0 );
   if( rand() ) {
      printf( "hello\n" );
   } else {
      printf( "hello\n" );
   }
}
Run Code Online (Sandbox Code Playgroud)

他们是否有相同的可观察行为?根据C++标准(1.9/6),可观察的行为包括:

  • 读取和写入volatile数据
  • 库I/O函数

现在,srand()rand()有可能不是I/O功能(虽然我不知道一个给定的实现是否会使用一些硬件噪声源),但他们修改程序的内部状态.他们操纵volatile数据吗?我不知道.调用printf()显然I/O操作及其序列在两个程序中都是相同的.

上述两个程序是否具有相同的可观察行为?我怎么知道两个给定的程序是否具有相同的可观察行为?

c++ state language-lawyer observable-behavior

7
推荐指数
1
解决办法
236
查看次数

标签 统计

c++ ×2

language-lawyer ×2

observable-behavior ×2

state ×2